按财产的共享值排序列表

本文关键字:排序 列表 共享 财产 | 更新日期: 2023-09-27 18:32:05

>我有一个对象列表,字段为UserID,属性:

我想按最共享的属性值对列表进行排序。因此,如果每个用户都有 Property="Popular",那么应该首先出现。 如果除了一个用户之外的每个人都有 Property="Second",那么它应该在列表中排在第二位......即使每个用户只使用一次。

我会对每个可能的属性做 distinct(),但这似乎对许多可能的属性没有效率。

按财产的共享值排序列表

您可以在Property上使用分组,按每个组中的计数数对组进行排序,然后使用 SelectMany() 再次展平列表:

var items = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Count())
                  .SelectMany(g => g);
                  .ToList();

从您的问题中,我不太清楚您是否希望出现重复项,以及您是否对UserID感兴趣.如果没有,您只需选择组的键,即可按所需顺序为您提供唯一属性值List<string>

var props = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Count())
                  .Select(g => g.Key);
                  .ToList();

编辑:

似乎这更符合您实际正在寻找的内容 - 组按具有给定属性的唯一用户数排序。

var props = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Select(x=> x.UserID)
                                           .Distinct()
                                           .Count())
                  .Select(g => g.Key);
                  .ToList();