簡體   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