List F通过取n和n-1,从平面列表创建元组列表
基本上我有一个列表[1,2,3,4,…,n],我想创建一个新的元组列表,然后使用list.Map将一个函数应用于新列表。 新列表的形式为[NULL,1,2,1,3,2,4,3,…,n,n-1] 但我并没有直接看到解决这个问题的最佳方法。 有什么想法吗 谢谢 编辑: 有了下面的答案,我终于像这样解决了我的问题List F通过取n和n-1,从平面列表创建元组列表,list,f#,functional-programming,tuples,List,F#,Functional Programming,Tuples,基本上我有一个列表[1,2,3,4,…,n],我想创建一个新的元组列表,然后使用list.Map将一个函数应用于新列表。 新列表的形式为[NULL,1,2,1,3,2,4,3,…,n,n-1] 但我并没有直接看到解决这个问题的最佳方法。 有什么想法吗 谢谢 编辑: 有了下面的答案,我终于像这样解决了我的问题 let TotalDistance (points:ResizeArray<TrackPoint>) = List.ofSeq(points) |> Seq.pairwis
let TotalDistance (points:ResizeArray<TrackPoint>) = List.ofSeq(points) |> Seq.pairwise |> Seq.map(fun (x,y) -> DistanceBetween x.Position y.Position) |> Seq.sum
Trackpoint是坐标C的集合,distance between是哈弗公式
谢谢你的帮助 看看Seq.windowed它几乎可以满足您的需求:
[1..10]
|> Seq.windowed 2
|> List.ofSeq;;
val it : int [] list =
[[|1; 2|]; [|2; 3|]; [|3; 4|]; [|4; 5|]; [|5; 6|]; [|6; 7|]; [|7; 8|];
[|8; 9|]; [|9; 10|]]
我会忽略你的空值,我们真的不想要这个;然后玩一点,这样你就可以:
[1..10]
|> Seq.windowed 2
|> Seq.map (fun [|a;b|] -> (b,a))
|> List.ofSeq;;
val it : (int * int) list =
[(2, 1); (3, 2); (4, 3); (5, 4); (6, 5); (7, 6); (8, 7); (9, 8); (10, 9)]
因此,您要搜索的内容是:
let pairList ls =
ls
|> Seq.windowed 2
|> Seq.map (fun [|a;b|] -> (b,a))
|> List.ofSeq
把它看作是一个练习,让你的空进去;
好的,这是指-您的Null,1不符合序列这基本上就是Seq.pairwise所做的
这看起来很容易,或者我误解了这个问题:[1..10]|>List.map fun n->n+1,n对于第一项,我不确定fyes中是否没有无效值太有效doh。。。但是你会得到一个n+1,我想你可以用n-1来代替@elios264这只适用于输入列表是序列号的情况,但它不能解决一般情况。我喜欢它,但我将使用seq.pairwise.very true-忘记pairwise;
[1..4] |> Seq.pairwise
> val it : seq<int * int> = seq [(1, 2); (2, 3); (3, 4)]
let pairs xs =
None::xs
|> Seq.pairwise
|> Seq.toList
pairs (List.map Some [1..4])