[英]C# return 2d array index from function
我有一个 function 像这样返回二维数组的索引
public int[] getIndex()
{
return new int[2] { i, j };
}
我希望能够使用这个 function 直接访问二维数组的值,例如
var val = array[getIndex()]
但是 getIndex() 会引发错误。 有没有其他方法可以返回二维数组的键? 还是我必须手动指定
var val = array[getIndex()[0], getIndex()[1]]
您可以使用Array.GetValue()
:
int element = (int)array.GetValue(getIndex());
请注意,这需要演员表。 我在这个例子中使用了int
,但是你需要为你的数组使用正确的类型。
如果你不喜欢强制转换,你可以编写一个扩展方法:
public static class Array2DExt
{
public static T At<T>(this T[,] array, int[] index)
{
return (T) array.GetValue(index);
}
}
你会这样称呼它:
var element = array.At(getIndex());
如果您离开解决方案手动指定索引,我建议改用下面的代码。 假设您getIndex()
不仅仅返回一些内部变量,则此代码将执行得更好。
var requiredItemIndex = getIndex();
var val = array[requiredItemIndex[0], requiredItemIndex[1]];
我会考虑创建一个自定义二维数组,并使用值元组或自定义点类型来描述索引。 例如:
public class My2DArray<T>{
public int Width { get; }
public int Height { get; }
public T[] Data { get; }
public My2DArray(int width, int height)
{
Width = width;
Height = height;
Data = new T[width * height];
}
public T this[int x, int y]
{
get => Data[y * Width + x];
set => Data[y * Width + x] = value;
}
public T this[(int x, int y) index]
{
get => Data[index.y * Width + index.x];
set => Data[index.y * Width + index.x] = value;
}
}
这种方法的一个优点是您可以直接访问支持数组。 因此,如果您只想处理所有项目,而不关心它们的位置,则可以使用普通循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.