1

我正在寻找一种有效的方法来“链接”数组/列表,并根据其中一个数组同步地对所有列表/数组进行排序。

例如,假设我有三个列表:

List<double> Data1;
List<double> Data2;
List<double> Data3;

列表中的项目显然在结构上不相关,但我希望它们是。例如 Data1[0]、Data2[0] 和 Data3[0] 是相关的。

所以现在我想根据 Data1 从大到小对三个列表的集合进行排序。我怎样才能做到这一点,以使所有三个列表保持同步?

预先感谢您的帮助!

4

3 回答 3

5

使项目在结构上相关:

public class Data {
  public double Data1 { get; set; }
  public double Data2 { get; set; }
  public double Data3 { get; set; }
}

拥有List<Data>,您可以轻松地对其中一个属性的项目进行排序:

theList.Sort((x, y) => x.Data2.CompareTo(y.Data2));
于 2012-05-20T12:36:01.097 回答
1

您可以使用Zip将数组绑定在一起,然后使用投影类型按特定点排序:

List<double> Data1;
List<double> Data2;
List<double> Data3;

var orderedByDataOne = Data1
    .Zip(Data2, (one, two) => new {one, two})
    .Zip(Data3, (zipped, three) => new {zipped.one, zipped.two, three})
    .OrderBy(x => x.one)
于 2012-05-20T12:24:28.397 回答
1

我将创建一个匿名类型的列表,它将所有三个相应列表中的值组合在一起,根据您想要的字段进行排序,然后将排序后的值投影回它们各自的列表中:

var combined =
    Enumerable.Range(0, Data1.Count)
              .Select(i => new
              {
                  Item1 = Data1[i],
                  Item2 = Data2[i],
                  Item3 = Data3[i],
              })
              .OrderBy(c => c.Item1)
              .ToList();

Data1 = combined.Select(c => c.Item1).ToList();
Data2 = combined.Select(c => c.Item2).ToList();
Data3 = combined.Select(c => c.Item3).ToList();
于 2012-05-20T12:38:15.407 回答