首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多维数组的C#行

多维数组的C#行
EN

Stack Overflow用户
提问于 2012-03-07 03:02:54
回答 2查看 20.4K关注 0票数 8

在C#编程语言中,如何传递多维数组的一行?例如,假设我有以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
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[i]);     //How do I pass the ith row of foo???
}

另外,有人能给我解释一下在C#中使用矩形和锯齿形数组的好处吗?在其他流行的编程语言中也会发生这种情况吗?(Java?)谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 03:07:24

您不能传递矩形数组的行,您必须使用交错数组(数组的数组):

代码语言:javascript
代码运行次数:0
运行
复制
int[][] foo = new int[6][];

for(int i = 0; i < 6; i++)
    foo[i] = new int[4];

int[] least = new int[6];

for(int i = 0; i < 6; i++)
    least[i] = FindLeast(foo[i]);

编辑

如果你觉得使用交错数组很烦人,而且非常需要一个矩形数组,那么一个简单的技巧就可以拯救你:

代码语言:javascript
代码运行次数:0
运行
复制
int FindLeast(int[,] rectangularArray, int row)
票数 8
EN

Stack Overflow用户

发布于 2014-05-02 21:49:17

更新:正如Jon Skeet正确地指出的那样,这不提供对行的引用,而是创建一个新的副本。如果您的代码需要更改行,则此方法不起作用。我重命名了该方法,以使这一点变得清晰。

更新2:如果您希望能够编辑字段,并对父数组进行更改,您可以使用我在this library I maed中提供的包装器。结果行foo.Row(i)不是一个数组,而是实现了IList,所以如果您需要传递一个数组,这也不是一个解决方案。

此扩展方法将允许您查询行的多维数组。应该注意的是,这是计算繁重的(不是有效的),如果可能的话,您应该在这些情况下使用锯齿数组。但是,如果您发现自己处于不能使用交错数组的情况下,这可能会很有用。

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

你的代码现在可以重写了:

代码语言:javascript
代码运行次数:0
运行
复制
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));
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9590144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档