【问题标题】:Checking the size of a list of arrays检查数组列表的大小
【发布时间】:2012-05-13 03:35:03
【问题描述】:

我有一个字符串数组列表:

List<string[]> parsedRaw = new List<string[]>();

此列表包含从 CSV 读取的行,其中 parsedRaw[3][5] 将是从 CSV 的第三行读取的第五项。

我知道我可以通过以下方式找到列表中的行数:

parsedRaw.Count

但是,给定一行,我怎样才能找到该行中元素的数量?我正在尝试在进入循环以从列表中读取之前执行测试,以避免“索引超出数组范围”错误,其中循环是:

for (k = 0; k < nBytes; k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

我在 CSV 中的一行中遇到错误,该行的元素少于其他元素。在进入这个循环之前,我需要检查 parsedRaw[i] 是否至少有 "StartInt + nBytes" 元素。

感谢您的任何建议!

【问题讨论】:

  • 你试过使用 lambda 表达式吗?
  • 实际上 parsedRaw[3][5] 将是第 4 行的第 6 项。

标签: c# list indexoutofboundsexception


【解决方案1】:

一行只是一个字符串数组string[],因此您可以使用数组的Length 属性找到它的大小。

foreach (string[] row in parsedRaw) {
    for (int i = 0 ; i != row.Length ; i++) {
        // do something with row[i]
    }
}

【讨论】:

  • 通过添加以下 if 语句作为进入 for 循环的先决条件,我能够使用 Length 属性获得解决方案:“if (parsedRaw[i].Length >= (StartInt + nBytes) )" 感谢您指出 Length 属性。
【解决方案2】:

给定行中元素的数量由

决定
parsedRaw[theRowIndex].Length

要修复您的 for 循环,您需要将 StartInt + k 值限制为小于 nBytes 和行长度的最小值

for (k = 0; (k < nBytes) && (k + StartInt < parsedRaw[i].Length); k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

【讨论】:

  • 这是一个有用的建议,但看起来您已将 nBytes 排除在外。这个循环会一直读到行尾,但每次遇到这个循环时我只需要提取 nBytes 的元素。
  • @Patrigon 我的错,添加回来
  • 实际上,现在我认为这是一个比将 for 循环嵌套在 if 循环中更好看的解决方案。再次感谢。
【解决方案3】:

试试

List<string[]> parsedRaw = new List<string[]>();
parsedRaw.Add(new string[] {"test1", "test2"});
parsedRaw.Add(new string[] { "test1", "test2", "test3" });
int totalSize = 0;
for (int i = 0; i < parsedRaw.Count(); i++)
{
    int rowSize = 0;
    for (int k = 0; k < parsedRaw[i].Count(); k++)
    {
        rowSize += parsedRaw[i][k].Length;    
    }                
    totalSize += rowSize;
}

【讨论】:

  • 是的,看起来 parsedRaw[i].Count() 返回的值与 parsedRaw[i].Length 相同。这也对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多