Thd*_*hdK 3 c# linq sorting group-by list
我有多个List对象.但是一个列表中的一些项目也存在于其他列表中.我的问题是如何将所有列表中的所有项目合并到一个最终列表中.因此,该列表中没有重复项,并且项目按每个项目在不同列表中的重复项数排序.
例
List1:[users1,user2,user3,user4]
List2:[user2,user4,user5]
List3:[user4,user6]
结果:[user4,user2,user1,user3,user5,user6]
(具有相同计数的用户的顺序无关紧要)
我试过这样的事情:
List<User> finalResults = list1.Concat(list2).ToList<User>();
var q = finalResults.GroupBy(x => x.id)
.Select(g => new User { name = g.First().name, count = g.Count() })
.OrderByDescending(usr => usr.count);
finalResults = q.ToList<User>();
Run Code Online (Sandbox Code Playgroud)
但结果是一个空列表.
提前致谢!
这将像你要求的那样工作:
var list1 = new[] { "u1", "u2", "u3", "u4" };
var list2 = new[] { "u2", "u4", "u5" };
var list3 = new[] { "u4", "u6" };
var allLists = list1.Concat(list2).Concat(list3);
var result = from u in allLists
group u by u into g
orderby g.Count() descending
select g.Key;
Run Code Online (Sandbox Code Playgroud)
还有一个带有对象而不是字符串的版本
var list1 = new[] { new User("u1"), new User("u2"), new User("u3"), new User("u4") };
var list2 = new[] { new User("u2"), new User("u4"), new User("u5") };
var list3 = new[] { new User("u4"), new User("u6") };
var allLists = list1.Concat(list2).Concat(list3);
var result = from u in allLists
group u by u.Name into g
orderby g.Count() descending
select g.Key;
Run Code Online (Sandbox Code Playgroud)
编辑:更新了代码g.Key
而非仅更新的代码示例g
.
这里是上面查询的方法链等价物:
var result = allLists
.GroupBy(u => u.Name)
.OrderByDescending(g => g.Count())
.Select(g => g.Key);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12577 次 |
最近记录: |