【问题标题】:Counting occurrences of elements from one list in another list计算另一个列表中一个列表中元素的出现次数
【发布时间】:2016-01-27 23:28:35
【问题描述】:

我有两个列表。虽然不是普通的。

第一:

Combinations<string> someCombination = new Combinations<string>(someOtherList, 2);
var firstList = someCombination.ToList();  

返回:

 [0] { cy gr }
 [1] { cy ja }
 [2] { cy ka }
 [3] { cy wo }
 [4] { cy zo }
 [5] { gr ja }
 [6] { gr ka }
 [7] { gr wo }
 [8] { gr zo }
 [9] { ja ka }
[10] { ja wo }
[11] { ja zo }
[12] { ka wo }
[13] { ka zo }
[14] { wo zo }

第二:

List<List<string>> secondList = new List<List<string>>();  

返回:

 [0] { gr ch wo zo }
 [1] { zo cy gr ma }
 [2] { wo po ja cy }
 [3] { ja ka po gr }
 [4] { zo ka ja og }
 [5] { cy ja zo wo }
 [6] { gr og po ma }
 [7] { wo zo ka cy }
 [8] { gr og wo ja }
 [9] { ja ka ch wo }

如您所见,我正在使用Combinatorics.Collections 库。 我真正想要的是计算firstListstring 元素在整个secondList 中出现的次数,并将所有这些计数存储在第三个列表中。喜欢这个:

List<int> occurrences = new List<int>();

这是这个列表的示例,每个索引都匹配firstList 索引:

 [0] 1  //because both "cy" and "gr" are contained in 1 secondList sublist(s)
 [1] 2  //because both "cy" and "ja" are contained in 2 secondList sublist(s)
 [2] 1  //et cetera..
 [3] 3
 [4] 1
 [5] 2
 [6] 1
 [7] 2
 [8] 2
 [9] 3
[10] 4
[11] 2
[12] 2
[13] 2
[14] 3

^如果我数错了,我的错。

我认为 LINQ 在这里可能会派上用场,但我对它完全没有希望。如果我弄错了,请纠正我。我非常感谢这里的帮助。

【问题讨论】:

    标签: c# linq combinations combinatorics


    【解决方案1】:
      var occurrences = firstList.Select(l => secondList.Count(ss => l.All(ss.Contains))).ToList();
    

    请注意,如果这些列表很大并且您关心性能,这不是一个好的解决方案。在那种情况下,我会考虑选择更合适的数据结构。

    【讨论】:

    • 坦率地说,我只关心它是否给出了结果,并且您的解决方案真的如我所愿。你有我最深切的感谢!
    • @goliatpiotr:太好了!那你能接受我的回答吗?
    • 对不起,我对这个堆栈溢出的东西很陌生。我想我现在接受了。保重!
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2018-11-20
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多