如何从F#中的数组列表中提取元素?

时间:2016-11-14 09:32:30

标签: .net f#

F#中有一个列表列表:

> wCost;;
val it : (float * float) list =
  [(0.1, 13.61972782); (1.527722646, 1.123863823); 
   (1.850460992, 0.4853361402);
   (1.923416366, 0.452707936); (1.939908012, 0.4510406634);
   (1.943635968, 0.4509554673); (1.944478676, 0.4509511138)]

我可以使用索引检索第一个列表:

> wCost.[0];;
val it : float * float = (0.1, 13.61972782)

但是,如果我将检索第一个列表的第二个元素,不幸的是,它与我预期的不一样

e.g. wCost[0][0] // it cannot retrieve the second element of first list.
13.61972782

请随时评论如何检索列表元素。谢谢。

2 个答案:

答案 0 :(得分:7)

您实际上有一个 元组 列表,而不是列表列表。

这意味着当您第一次索引列表时,您将返回一个元组(即int * int)而不是列表。

要访问该元素,您可以使用fstsnd关键字来访问元素:请参阅https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/operators.fst%5B't1,'t2%5D-function-%5Bfsharp%5D < / p>

在你的情况下,你会写fst (wCost.[0])来得到你想要的东西。

答案 1 :(得分:4)

在您的示例中,wCost的类型为(float * float) list,它不是列表列表,而是元组列表。 F#中的元组不支持索引访问,因此您可能希望将元组转换为双元素列表

wCost
|> List.map (fun (x,y) -> [x; y])

或使用元组函数访问各个元素

wCost.[0] |> fst

wCost.[0] |> snd