说我有这个:
let coor = seq { ... }
// val coor : seq<int * int> = seq[(12,34); (56, 78); (90, 12); ...]
我试图获取序列中第二个元素的第一个数字的值,在本例中为56.查看MSDN Collection API引用,Seq.nth 1 coor
返回(56, 78)
,类型为seq <int * int>
。我如何从中获得56个?
答案 0 :(得分:3)
这是tuple,因此您可以使用函数fst
;
> let value = fst(Seq.nth 1 coor);;
val value : int = 56
...或通过模式匹配访问它;
> let value,_ = Seq.nth 1 coor;;
val value : int = 56
答案 1 :(得分:2)
我建议你阅读Tuple文章: http://msdn.microsoft.com/en-us/library/dd233200.aspx
有几个例外可能会对这个问题有所了解:
函数fst用于访问元组的第一个元素:
(1, 2) |> fst // returns 1
函数snd用于访问第二个元素
(1, 2) |> snd // returns 2
为了从更宽的元组中提取元素,您可以使用以下语法:
let _,_,a,_ = (1, 2, 3, 4) // a = 3
要在各种集合中使用它(传递给集合函数的lambda),让我们从以下顺序开始:
let s = seq {
for i in 1..3 do yield i,-i
}
我们最终
seq<int * int> = seq [(1, -1); (2, -2); (3, -3)]
假设我们只想提取第一个元素(注意lambda的参数):
s |> Seq.map (fun (a, b) -> a)
甚至更短:
s |> Seq.map fst
让我们回到你的问题。
s |> Seq.nth 1 |> fst