更新:作为乔恩斯基特正确地指出,这并不非p将参考提供给该行,而是创建新副本。如果您的代码需要更改一行,此方法不起作用。我已经重新命名了这个方法来说明这一点。
更新2:如果你想能够编辑的字段,并且有变化发生在父阵列,也可以使用包装我this library I maed提供。结果行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));
}
我可以将矩形数组传递给接受锯齿状数组的函数吗? – CodeKingPlusPlus 2012-03-06 19:13:00
@CodeKingPlusPlus:不,你不能 – BlackBear 2012-03-06 19:22:34
所以基本上这不是一个解决方案:) – 2014-05-02 13:37:25