28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
1 | |
Как перевести список в кортеж?05.08.2014, 17:54. Показов 2423. Ответов 11
Метки нет (Все метки)
0
|
05.08.2014, 17:54 | |
Ответы с готовыми решениями:
11
Как вывести кортеж целиком и как распаковать кортеж в переменные? Создать кортеж и распаковать кортеж в несколько переменных Функция, принимает на вход список и возвращающая кортеж Кортеж как аргумент |
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
|
||||||
05.08.2014, 18:39 | 2 | |||||
В общем случае никак, насколько я знаю. Да и зачем? Конкретно в твоем примере будет
1
|
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
05.08.2014, 19:01 [ТС] | 3 |
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,589
|
|
05.08.2014, 19:24 | 4 |
Тогда никак, размер кортежа -- это часть его типа, а в F# зависимых типов вроде нет.
1
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
05.08.2014, 19:55 | 5 |
через рефлекшн можно сделать. но это очень плохая идея. сначала скажите для чего это может понадобиться
1
|
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
05.08.2014, 20:07 [ТС] | 6 |
Это не то что вы подумали.Просто понадобилась такая запись через запитые.Потом покажу.
можете показать.
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
05.08.2014, 20:09 | 7 |
1
|
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
06.08.2014, 07:13 [ТС] | 8 |
Например код.
Код
let listToTuple l = let l' = List.toArray l let types = l' |> Array.map (fun o -> o.GetType()) let tupleType = Microsoft.FSharp.Reflection.FSharpType.MakeTupleType types Microsoft.FSharp.Reflection.FSharpValue.MakeTuple (l' , tupleType)
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
06.08.2014, 07:30 | 9 |
ну так
Код
val listToTuple : l:obj list -> obj Код
> [0..4] |> List.map box |> listToTuple;; val it : obj = (0, 1, 2, 3, 4)
1
|
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
06.08.2014, 08:03 [ТС] | 10 |
Вод код на WPF
Код
open System open System.Windows open System.Windows.Controls //==================================================================================================== let Sum(n : int, m : int, k : int, d : int) = let rnd = System.Random() let x1 = Array2D.init n m (fun i j -> rnd.Next(10)) let x2 = Array2D.init m k (fun i j -> rnd.Next(10)) // Умножение матриц let x3 = Array2D.init n k (fun i j -> Array.sum (Array.init m (fun s -> x1.[i,s] * x2.[s,j]))) if d < 0 then x1 elif d = 0 then x2 else x3 //==================================================================================================== let listToTuple l = let l' = List.toArray l let types = l' |> Array.map (fun o -> o.GetType()) let tupleType = Microsoft.FSharp.Reflection.FSharpType.MakeTupleType types Microsoft.FSharp.Reflection.FSharpValue.MakeTuple (l', tupleType) //================================================================ let app = Application() let w =new Window(Height = 700.0, Width = 640.0) let Panel = StackPanel() //================================================================ let DataGrid1 = DataGrid(Height = 200.0, Width = 550.0) DataGrid1.Margin <- Thickness(0.0,5.0,0.0,0.0) DataGrid1.AutoGenerateColumns <- true let DataGrid2 = DataGrid(Height = 200.0, Width = 550.0) DataGrid2.Margin <- Thickness(0.0,5.0,0.0,0.0) DataGrid2.AutoGenerateColumns <- true let DataGrid3 = DataGrid(Height = 200.0, Width = 550.0) DataGrid3.Margin <- Thickness(0.0,5.0,0.0,0.0) DataGrid3.AutoGenerateColumns <- true //================================================================ let Label1 = Label(Width=30.0) Label1.Margin <- Thickness(-600.0,-30.0,0.0,0.0) Label1.Content <- "N=" let Label2 = Label(Width=30.0) Label2.Margin <- Thickness(-400.0,-30.0,0.0,0.0) Label2.Content <- "M=" let Label3 = Label(Width=30.0) Label3.Margin <- Thickness(-200.0,-30.0,0.0,0.0) Label3.Content <- "K=" //================================================================ let Text1 = TextBox(Width = 60.0) Text1.Margin <- Thickness(-500.0,-30.0,0.0,0.0) let Text2 = TextBox(Width = 60.0) Text2.Margin <- Thickness(-300.0,-30.0,0.0,0.0) let Text3 = TextBox(Width = 60.0) Text3.Margin <- Thickness(-100.0,-30.0,0.0,0.0) //================================================================ let But1 = Button(Width = 60.0) But1.Margin <- Thickness(100.0,5.0,0.0,0.0) But1.Content <- "Вычислить" //================================================================ But1.Click.Add(fun _ -> let t1 = int(Text1.Text) let t2 = int(Text2.Text) let t3 = int(Text3.Text) let q1 = Sum(t1, t2, t3, 1) let q2 = Sum(t1, t2, t3, -1) let q3 = Sum(t1, t2, t3, 0) DataGrid1.ItemsSource <- [for i in 0..t1-1 -> [for j in 0..t2-1-> q2.[i,j] ]|> List.map box |> listToTuple] DataGrid2.ItemsSource <- [for i in 0..t2-1 -> [for j in 0..t3-1-> q3.[i,j] ]|> List.map box |> listToTuple] DataGrid3.ItemsSource <- [for i in 0..t1-1 -> [for j in 0..t3-1-> q1.[i,j] ]|> List.map box |> listToTuple]) //================================================================ Panel.Children.Add But1 |> ignore Panel.Children.Add Text1 |> ignore Panel.Children.Add Text2 |> ignore Panel.Children.Add Text3 |> ignore Panel.Children.Add Label1 |> ignore Panel.Children.Add Label2 |> ignore Panel.Children.Add Label3 |> ignore Panel.Children.Add DataGrid1 |> ignore Panel.Children.Add DataGrid2 |> ignore Panel.Children.Add DataGrid3 |> ignore //================================================================ w.Content <- Panel [<STAThread>] do app.Run(w) |> ignore
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
06.08.2014, 09:05 | 11 |
странная конструкция.
WPF появился раньше чем .Net4. туплы появились только в .Net4 значит WPF в состоянии работать без туплов. вероятно вы делаете чтото не так
1
|
28 / 26 / 3
Регистрация: 10.07.2014
Сообщений: 638
|
|
06.08.2014, 11:21 [ТС] | 12 |
0
|
06.08.2014, 11:21 | |
06.08.2014, 11:21 | |
Помогаю со студенческими работами здесь
12
Как распаковать кортеж? Как перебирать кортеж Как деконструировать кортеж в переменные? Кортеж с абстрактным типом как параметр шаблона + smart_ptr Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |