更新: Jon Skeet が正しく指摘しているように、これは行への参照を提供するのではなく、新しいコピーを作成します。コードで行を変更する必要がある場合、この方法は機能しません。これを明確にするために、メソッドの名前を変更しました。
更新 2 : フィールドを編集し、親配列にも変更を加えたい場合は、私が作成したこのライブラリで提供するラッパーを使用できます。結果の行foo.Row(i)
は配列ではなく、代わりに を実装するため、配列を渡す必要がIList
ある場合、これも解決策ではありません。
この拡張メソッドを使用すると、行の多次元配列をクエリできます。これは計算量が多い (効率的ではない) ことに注意してください。可能であれば、これらの状況ではジャグ配列を使用する必要があります。ただし、ジャグ配列を使用できない状況に陥った場合は、これが役立つ場合があります。
public static T[] CopyRow<T>(this T[,] arr, int row)
{
if (row > arr.GetLength(0))
throw new ArgumentOutOfRangeException("No such row in array.", "row");
var result = new T[arr.GetLength(1)];
for (int i = 0; i < result.Length; i++)
{
result[i] = arr[row, i];
}
return result;
}
コードを次のように書き換えることができます。
int[,] foo;
foo = new int[6,4];
int[] least;
least = new int[6];
for(int i = 0; i < 6; i++)
{
least[i] = FindLeast(ref foo.CopyRow(i));
}