更新:正如 Jon Skeet 正确指出的那样,这不提供对该行的引用,而是创建一个新副本。如果您的代码需要更改一行,则此方法不起作用。我已重命名该方法以明确这一点。
更新 2:如果您希望能够编辑字段,并且对父数组也进行更改,您可以使用我在这个库中提供的包装器 I maed。结果行foo.Row(i)
不是数组,而是 implements 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));
}