繁体   English   中英

C# 从 function 返回二维数组索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM