所以我有一组列表,没有关于我有多少列表的固定数量。
List1 = {"a", "b", "c", "d"}
List2 = {"b", "c", "d", "e"}
List3 = {"c", "d", "e", "f"}
.
.
.
Listn = {"g", "e", "a", "c"}
Run Code Online (Sandbox Code Playgroud)
每个列表将包含唯一的项目,单个列表的长度可以在 20 - 30 个项目范围内。我将所有列表存储在另一个列表中以允许 n 个列表。
ListOfLists = {List1, List2, List3, ..., Listn}
Run Code Online (Sandbox Code Playgroud)
就使用最少的处理能力而言,生成包含 ListOfLists 中包含的所有唯一项及其出现次数的列表或数组的最佳方法是什么?
在输出方面,我认为最好的选择是包含项目及其出现次数的数组列表。
UniqueListItems = { {"a", 12}, {"b" ,3}, {"c", 18}, {"d", 15}, {"e", 5} }
Run Code Online (Sandbox Code Playgroud)
最终,我想按项目出现对列表进行排序,并按降序显示项目。
Output:
c
d
a
e
b
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用多个嵌套的 for 和 foreach 循环来执行此操作,但结果是一些相当笨重的代码。限制因素之一是我发现的唯一列出操作的列表最多可使用 2 个列表,而不是 n 个列表。
有没有在内置的 C# 列表操作中使用 n 个列表的方法?如果没有,处理这个问题的最佳方法是什么?
您可以Linq在此处使用方法,如下面的代码所示。
var uniqueListItems = ListOfLists.SelectMany(l => l)
.GroupBy(l => l)
.Select(l => new {Key = l.Key, Count = l.Count()})
.OrderByDescending(o => o.Count);
Run Code Online (Sandbox Code Playgroud)
上面的代码用于SelectMany展平列表和结果,查询应用GroupBy来计算计数。
您可以在此 dotnet fiddle - https://dotnetfiddle.net/VsByaj 上查看示例代码