如何在C#中从多维数组中提取一个数组

问题描述 投票:0回答:2

如何在C#中从多维数组中提取单个数组?有什么捷径可做吗?

for (int i = 0; i < 50; i++)
{
    HUYArrayEnd[i] = HUYArray[500, 0, i];
}
c# arrays multidimensional-array shortcode
2个回答
0
投票
HUYArrayEnd = Enumerable.Range(0, 50).Select(x => HUYArray[500, 0, x]).ToArray();

工作示例:

int[,,] HUYArray = new int[501,501,501];
int[] HUYArrayEnd;
for(int i=0;i<501;i++){
    for(int j=0;j<501;j++){
        for(int k=0;k<501;k++){
         HUYArray[i,j,k]=i+j+k;
        }
    }
}

HUYArrayEnd = Enumerable.Range(0, 50).Select(x => HUYArray[500, 0, x]).ToArray();

如果要从索引[500,0,*]中获取所有元素,则可以使用

HUYArrayEnd = Enumerable.Range(0, HUYArray.GetLength(2))
    .Select(x => HUYArray[500, 0, x])
    .ToArray();

0
投票
如果您有一个接受一维数组的方法:

void Foo(int[] input) { for (var i = 0; i< 50; i++) Bar(input[i]); }

您正在这样称呼它:

for (int i = 0; i < 50; i++)
{
    HUYArrayEnd[i] = HUYArray[500, 0, i];
}
Foo(HUYArrayEnd);

然后您可以用部分函数替换array参数:

void Foo(Func<int,int> input)
{
    for (var i = 0; i< 50; i++)
        Bar(input(i));
}

然后像这样传递它:

Foo(i => HUYArray[500,0,i]);

此解决方案消除了分配和复制阵列的需要。

© www.soinside.com 2019 - 2024. All rights reserved.