![](/img/trans.png)
[英]In C#, How can I iterate through a entire 2D Array and count the number of 0s?
[英]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.