计算一个列表中元素在另一个列表中的出现次数
Counting occurrences of elements from one list in another list
我有两个列表。虽然不是通常的。
第一个:
Combinations<string> someCombination = new Combinations<string>(someOtherList, 2);
var firstList = someCombination.ToList();
它returns:
[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>>();
它returns:
[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
库。
我真正想要的是计算 firstList
的 string
元素在整个 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 在这里可能会派上用场,但我对它完全没有希望。如果我错了,请纠正我。非常感谢您的帮助。
var occurrences = firstList.Select(l => secondList.Count(ss => l.All(ss.Contains))).ToList();
请注意,如果这些列表很大并且您关心性能,这不是一个好的解决方案。那样的话我会考虑选择更合适的数据结构。
我有两个列表。虽然不是通常的。
第一个:
Combinations<string> someCombination = new Combinations<string>(someOtherList, 2);
var firstList = someCombination.ToList();
它returns:
[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>>();
它returns:
[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
库。
我真正想要的是计算 firstList
的 string
元素在整个 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 在这里可能会派上用场,但我对它完全没有希望。如果我错了,请纠正我。非常感谢您的帮助。
var occurrences = firstList.Select(l => secondList.Count(ss => l.All(ss.Contains))).ToList();
请注意,如果这些列表很大并且您关心性能,这不是一个好的解决方案。那样的话我会考虑选择更合适的数据结构。