1

配列/リストを相互に「リンク」し、配列の1つに基づいてすべてのリスト/配列を同期的に並べ替える効率的な方法を探しています。

たとえば、3つのリストがあるとします。

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

リスト内の項目は明らかに構造的に関連していませんが、私はそれらを関連させたいと思っています。たとえば、Data1 [0]、Data2 [0]、およびData3[0]は関連しています。

そこで、Data1に基づいて3つのリストのコレクションを最大から最小に並べ替えたいと思います。3つのリストすべてが同期されたままになるようにするにはどうすればよいですか?

よろしくお願いします!

4

3 に答える 3

5

アイテムを構造的に関連させる:

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

を使用するList<Data>と、プロパティの1つでアイテムを簡単に並べ替えることができます。

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

3 つのそれぞれのリストすべての値を組み合わせて匿名型のリストを作成し、必要なフィールドに基づいて並べ替えてから、並べ替えられた値をそれぞれのリストに射影します。

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 に答える
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 に答える