F#转换和聚合列表列表

F#转换和聚合列表列表,f#,F#,我有以下一组数据 let results = [[true;false;true];[true;true;false];[false;false;false]] 我想把它变成 let summary = [2;1;1] 这是盒子里能做的事吗?我在想名单。收集,但我不能让它工作 提前感谢基于您的示例,我假设您希望分别对输入列表的第1、第2、第3等元素中的true值进行求和 一种方法是将布尔值列表转换为包含1或0的数字列表,然后聚合这些列表。因此,对于您的输入,带有数字的列表将是: [[1; 0

我有以下一组数据

let results = [[true;false;true];[true;true;false];[false;false;false]]
我想把它变成

let summary = [2;1;1]
这是盒子里能做的事吗?我在想名单。收集,但我不能让它工作


提前感谢

基于您的示例,我假设您希望分别对输入列表的第1、第2、第3等元素中的
true
值进行求和

一种方法是将布尔值列表转换为包含1或0的数字列表,然后聚合这些列表。因此,对于您的输入,带有数字的列表将是:

[[1; 0; 1]; [1; 1; 0]; [0; 0; 0]]
我们可以使用嵌套的
List.map轻松地获取此信息:

results |> List.map (List.map (fun b -> if b then 1 else 0))
现在您只需要压缩列表并添加相应的数字。给定前两个列表,您可以使用
List.map2
如下所示:

List.map2 (+) [1; 0; 1] [1; 1; 0] = [2; 1; 1]
整个过程可以使用部分应用程序编写为单个nice管道:

results
|> List.map (List.map (fun b -> if b then 1 else 0))
|> List.reduce (List.map2 (+))

你能澄清一下布尔值是如何从源代码列表中计算出来的吗?哈哈。我希望我能自己澄清一下!源列表是一系列值,我比较每个值是否包含某些其他值。如果我把函数发布到那一点会有帮助吗?好吧,我写了一些东西,生成了你输入的结果,但我不知道这是否是你想要的:-)谢谢。我将在本周晚些时候把它写进我的博客(假设我能完成这个)。我有一个Apriori算法50%完成。。。我想我这个周末花了15个小时在上面,我有57行代码。。。