如何按只能在排序过程中获得的值对列表进行排序?


public class MyClass
{
public int X { get; }
public int GetSomeValue(List<MyClass> values)
{
return valueOfOperation;
}
}

假设我有一个List<MyClass>.我想按属性 X 对其进行排序。如果有多个对象具有相同的 X 值,我想按返回某个操作值的GetSomeValue(objectsWithSameXValue)对它们进行排序。所述返回值是使用具有相等值 X 的所有对象计算的。

所需结果应如下所示:

Object    Property X    GetSomeValue({item2, item3, item4})
item1         1          
item2         3              2
item3         3              3
item4         3              9
item5         4              

Item2、item3 和 item4 也按 GetSomeValue(( 排序。

有什么我可以做的没有巨大的如果...否则树?我尝试了不同的方法,但迟早我会迷路,因为它变得混乱。

我会尝试执行以下操作:

  1. 按 X 对值进行分组
  2. 按键对组列表进行排序
  3. GetSomeValue(group)对每个组中的值进行排序
  4. 将结果合并回一个大列表中
items.GroupBy(item => item.X)
.OrderBy(group => group.Key)
.SelectMany(group => group.OrderBy(item => item.GetSomeValue(group)))
.ToList()

如果有选择,我建议将GetSomeValue(List<MyClass> values)更改为GetSomeValue(IEnumerable<MyClass> values),这样您就不必反复打电话.ToList()

最新更新