配列の配列のように聞こえます。データソース(SQL Server、XMLなど)から各要素(ボックス)を読み取るときに、3メンバーの配列を作成し、サイズ順に属性を挿入します。次に、3メンバー配列を配列の配列に追加します。次に、LINQまたはその他の関数を使用して、配列の配列を1番目、2番目、または3番目のメンバーで並べ替えることができます。
Box1,2,2,3
Box2,5,10,1
Box3,8,4,7
になる:
{ {10,5,1}, {8,7,4}, {3,2,2} } // First
また
{ {8,7,4}, {10,5,1}, {3,2,2} } // Second
また
{ {8,7,4}, {3,2,2}, {10,5,1} } // Third
次に、最初の要素、2番目の要素などで配列を並べ替えることができます。
LINQを使用すると、1つのステートメントで配列の配列を簡単に作成できますが、正確にどのように作成するかはデータソースによって異なります。Box
3つのパラメーター、、、Length
およびWidth
で名前が付けられたクラスHeight
があり、このクラスのインスタンスを含む厳密に型指定されたコレクションを作成したと仮定します。
class BoxSorter {
public IEnumerable<Box> Boxes {
get;
private set;
}
class Box {
public double Height {
get;
set;
}
public double Width {
get;
set;
}
public double Length {
get;
set;
}
}
public void Initialize() {
this.Boxes = new List<Box>( new Box[] {
new Box() { Height = 2, Length = 2, Width = 3 },
new Box() { Height = 5, Length = 10, Width = 1 },
new Box() { Height = 8, Length = 4, Width = 7 }
} );
}
public void Sort() {
var l_arrayOfArrays =
this.Boxes.Select(
// Create an array of the Height, Length and Width, then sort the array elements (largest to smallest)
b => new double[] { b.Height, b.Length, b.Width }.OrderByDescending( v => v ).ToArray()
);
var l_dimension1 =
l_arrayOfArrays.OrderByDescending(
// Sort the array of arrays by the first (and largest) dimension
a => a[0]
);
var l_dimension2 =
l_arrayOfArrays.OrderByDescending(
// Sort the array of arrays by the second (and middle) dimension
a => a[1]
);
var l_dimension3 =
l_arrayOfArrays.OrderByDescending(
// Sort the array of arrays by the third (and smallest) dimension
a => a[2]
);
}
}