List 如何从F中的列表列表中筛选具有相同尾部的列表#

List 如何从F中的列表列表中筛选具有相同尾部的列表#,list,filter,f#,List,Filter,F#,我有下面的清单 [[1L; 1L]; [8L; 8L]; [27L; 2L; 7L]; [64L; 4L; 6L]; [125L; 1L; 2L; 5L]; [216L; 1L; 2L; 6L]; [343L; 3L; 3L; 4L]; [512L; 1L; 2L; 5L]; [729L; 2L; 7L; 9L]] 我想过滤具有相同尾部元素的列表 例如,如果我有下面列出的两个列表 [[23L;1L;2L;3L];[33L;1L;2L;3L]] 我想把它们从列表

我有下面的清单

    [[1L; 1L]; [8L; 8L]; [27L; 2L; 7L]; [64L; 4L; 6L]; [125L; 1L; 2L; 5L];
    [216L; 1L; 2L; 6L]; [343L; 3L; 3L; 4L]; [512L; 1L; 2L; 5L];
    [729L; 2L; 7L; 9L]]
我想过滤具有相同尾部元素的列表

例如,如果我有下面列出的两个列表

    [[23L;1L;2L;3L];[33L;1L;2L;3L]]
我想把它们从列表的主列表中筛选出来,但我对F#不熟悉,对此我有问题。如果有人能帮助我,那就太好了。更具体地说,我想过滤4个具有完全相同尾部的列表

我提供的列表只是显示格式的示例

多谢各位

更新:我也可以让它有一个元组。比如说

 (int64 * int64 list) list)

 [(1L, [1L]); (8L, [8L]); (27L, [2L; 7L]); (64L, [4L; 6L]);
 (125L, [1L; 2L; 5L]); (216L, [1L; 2L; 6L]); (343L, [3L; 3L; 4L]);
 (512L, [1L; 2L; 5L]); (729L, [2L; 7L; 9L]); (1000L, [0L; 0L; 0L; 1L])]
但我仍然面临同样的问题。我需要筛选具有相同列表元素的元素。

有很多选择-这是“无点”的,并通过管道传输数据。可以将groupBy
snd
替换为
List.tail
,以获取原始问题的答案,而不是更新

let data = [(1L, [1L]); (8L, [8L]); (27L, [2L; 7L]); (64L, [4L; 6L]);
            (125L, [1L; 2L; 5L]); (216L, [1L; 2L; 6L]); (343L, [3L; 3L; 4L]);
            (512L, [1L; 2L; 5L]); (729L, [2L; 7L; 9L]); (1000L, [0L; 0L; 0L; 1L])]
data |> Seq.groupBy snd |> Seq.map (snd >> List.ofSeq)
     |> Seq.filter (List.length >> ((<) 1)) |> Seq.concat |> List.ofSeq

val it : (int64 * int64 list) list =
  [(125L, [1L; 2L; 5L]); (512L, [1L; 2L; 5L])]
let data=[(1L[1L]);(8L[8L]);(27L[2L;7L]);(64L[4L;6L]);
(125L[1L;2L;5L]);(216L[1L;2L;6L]);(343L[3L;3L;4L]);
(512L[1L;2L;5L]);(729L[2L;7L;9L]);(1000L[0L;0L;0L;1L])]
数据|>Seq.groupBy snd |>Seq.map(snd>>List.ofSeq)
|>Seq.filter(List.length>>((Seq.concat |>List.ofSeq
val it:(int64*int64列表)列表=
[(125L[1L;2L;5L]);(512L[1L;2L;5L])]
最奇怪的是
((1
)。 如果愿意,可以扩展
>
函数联接-例如,替换


|>Seq.map(snd>>List.ofSeq)
|>Seq.map snd |>Seq.map List.ofSeq

通过tail你是指除了head元素以外的所有元素,还是指任何常见的tail元素,例如仅仅是最后一个元素?通过tail,我指除head元素以外的所有元素。例如[[23L;1L;2L;3L];[33L;1L;2L;3L]]这两个列表的尾部是[1L;2L;3L]我想从具有相同尾部的列表中筛选所有列表。如果在列表列表中,另外两个或更多元素将具有相同但另一个尾部,例如“[[23L;1L;2L;3L];[33L;1L;2L;3L];[29L;3L;7L];[98L;3L;7L];[45L;3L;7L]…]’?实际上这并不重要。如果2个或更多的列表具有相同的尾部,那么我也想对它们进行筛选。但我想要4个具有完全相同尾部的列表。因此,如果有4个具有相同尾部的列表,还有4个具有相同尾部但与前4个不同的列表,那么我想要8个列表。但我将在更大的数据集上运行此操作,我相信我不会运行但即使我这样做了也没关系。谢谢分配。这真的是一个帮助分配。我还有一个小问题,我没能找到。我也应该为我的F#程序编写测试,但在网上找不到太多。你能告诉我F#Scriptssory的测试是如何编写的,但你在我脑子里给了我一个答案吗今日新闻:)