gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:21:35 26 4
gpt4 key购买 nike

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

一切都按 X 排序。Item2、item3 和 item4 也按 GetSomeValue() 排序。

如果没有巨大的 if...else 树,我还能做什么?我尝试了不同的方法,但迟早我会迷路,因为它变得令人困惑。

最佳答案

我会尝试做以下事情:

  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()反复。

关于c# - 如何按只能在排序过程中获得的值对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62566540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com