0

我有一个包含 100 个元素的类对象列表。该类有 2 个成员变量,都是 Doubles。我想按 Class1.A 升序对列表进行排序,然后在此排序列表的指定子列表中(例如元素 5 到 60),为最大 Class1.B 输出 Class1.A。

我知道这在 LINQ 中应该是非常可行的,但是除了在 C# 中运行 SQL 查询之外,我对 LINQ 还是很陌生,而且我还没有找到真正帮助我完成这项工作的教程/问答。

非常感谢您提前。

public class Class1{
  public Double A;
  public Double B;

  public void CompareByA(Class1 C1, Class1 C2)
  { 
     return C1.A.CompareTo(C2.A);  
  }
}

public Double FindMaxAWithinSubset(List<Class1> L, int X, int Y)
{
  L.Sort(Class1.CompareByA);
  // Once L has been sorted by A, within the sublist of L with element         
  // indices between X and Y, find the element with maximum B, and output its A.
}
4

3 回答 3

1

我更喜欢使用 LINQ 扩展,所以我会这样做。不确定看起来 SQL 的 linq 表达式是什么。

Double maxAValueInSubSet = L.OrderBy(x => x.A).Skip(X).Take(Y-X).Max(x => x.B).Single().A;
于 2013-04-03T02:56:01.963 回答
1
var result = myInstance.OrderBy(x => x.A).Skip(5).Take(55).Max(y => y.B).FirstOrDefault();

这样做是按双 A 排序,跳过前 5 个,取下一个 55,然后选择剩余 B 的最大值。

于 2013-04-03T02:56:56.093 回答
1

你可以使用 LINQ OrderBy,所以你不需要使用Sort. 首先OrderBy通过属性 A,然后您可以使用Where从 X 到 Y 的索引选择项目。

然后你OrderByDescending在属性B中。这样可以使最大B在列表顶部的项目。你只First需要得到结果。

   var result = list.OrderBy(x => x.A)
                    .Where((x, index) => index >= X && index <= Y)
                    .OrderByDescending(x => x.B)
                    .First().A;
于 2013-04-03T03:01:33.770 回答