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
请随时评论如何检索列表元素。谢谢。
答案 0 :(得分:7)
您实际上有一个 元组 列表,而不是列表列表。
这意味着当您第一次索引列表时,您将返回一个元组(即int * int
)而不是列表。
要访问该元素,您可以使用fst
或snd
关键字来访问元素:请参阅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