C#迭代2d数组

时间:2017-03-24 14:34:59

标签: c# arrays

我是以下数组:
enter image description here

我需要按如下方式输出值:

"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;

3 个答案:

答案 0 :(得分:6)

目前尚不清楚为什么你这里有两个循环。你总是希望每行有两个相同的元素 - 索引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]等 - 这看起来就像你需要的那样。

答案 1 :(得分:0)

将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" }
};

输出&#39;结果&#39;是:

  

你好世界:你好

     

堆叠:溢出

答案 2 :(得分:0)

标题有点误导,因为它似乎不是标准的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开始for循环,因为数组似乎是从1开始而不是从0开始。
假设您只需要两个值,则可以使用[i,1]和[i,2]而不是使用GetLength(1)循环次要部分的长度。