繁体   English   中英

C#遍历2D数组

[英]C# iterate through 2d array

我下面的数组:
在此处输入图片说明

我需要将值输出如下:

"API Docs Portal : op-api-docs"
"Big Ideas : op-bigideas"
"Education : op-education"
....

我已经尝试了一些东西,但是它没有按预期工作...

        for (var x = 1; x <= reportValue.GetLength(0); x++)
        {
            for (var y = 1; y <= reportValue.GetLength(1); y++)
            {
                if (reportValue[x, y] != null)
                {
                    var id = reportValue[x, y];
                    var name = reportValue[x, y + 1];
                    var result = name + " : " + id;
                }
            }
        }

注意:
这是我获取reportValue数组的方式(使用C#Interop):

    var reportLast = ws.Range["A" + ws.Rows.Count].End(Excel.XlDirection.xlUp).Row;
    var rngReport = (Excel.Range)ws.Range[ws.Cells[2, 1], ws.Cells[reportLast, 2]];
    var reportValue = rngReport.Cells.Value;

目前尚不清楚为什么在这里有两个循环。 您总是希望每一行都具有相同的两个元素-索引1和索引2。因此,您只需要:

for (var x = 1; x <= reportValue.GetLength(0); x++)
{
    var id = reportValue[x, 1];
    var name = reportValue[x, 2];
    var result = name + " : " + id;
    // Use result
}

那将获取[1, 1] : [1, 2] ,然后[2, 1] : [2, 2] ,然后[3, 1] : [3, 2]等-看起来正是您所需要的。

将2D数组转换为这种格式的字符串的最佳方法是:

var results = string.Join(Environment.NewLine, array.Select(x => string.Join(" : ", x)));

以这个数组为例:

var array = new string[][]
{
    new string[] { "Hello world", "Hello" },
    new string[] { "Stack", "Overflow" }
};

“结果”的输出为:

世界你好:你好

堆栈溢出

标题似乎有点误导,因为它似乎不是标准的2D阵列。
不过:

StringBuilder builder = new StringBuilder();
for (int i = 1; i <= reportValue.GetLength(0); i++)
{
    string id = (string)reportValue[i, 1];
    string name = (string)reportValue[i, 2];
    builder.AppendLine(id + " : " + name);
}
// Process the result

因为数组似乎是从1开始而不是从0开始for从1开始for循环。
假设只需要两个值,则可以使用[i,1]和[i,2],而不是使用GetLength(1)遍历次级零件的长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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