Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List F通过取n和n-1,从平面列表创建元组列表_List_F#_Functional Programming_Tuples - Fatal编程技术网

List F通过取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

基本上我有一个列表[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.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])