【问题标题】:C# LINQ select from list of arrays of stringsC# LINQ 从字符串数组列表中选择
【发布时间】:2023-04-04 22:55:01
【问题描述】:

我有这个数据

保留在字符串数组列表中:List<string[]> arrData = new List<string[]>();。 列表中填充了以下代码:

int columnsCount =4;
int rowsCount = 6;
for (int j = 0; j < columnsCount; j++)
{
    string[] columnData = new string[rowsCount];
    for (int i = 0; i < rowsCount; i++)
        columnData[i] = csv[i][j];
    arrData.Add(columnData);
}

csv[i][j] 给出 r1c1 等的值,所以最后列表有 4 个数组元素,每个数组有 6 个值。

  1. 如何使用 LINQ 选择黄色行,即第一个数组中有“a”,第二个数组中有“g”,第三个数组中有“m”?
  2. 如何使用 LINQ 按一列中的值列表进行过滤(即选择第一列中包含“a”或“b”的所有行)?

我可以更改代码并创建列表/字典/任何更合适的列表。

【问题讨论】:

  • 如果没有 LINQ,你会怎么做?您是否尝试过任何方法来实现这一目标?
  • 您自己做的很困难,因为您将数据存储在列中,而不是行中。将其存储为行使其更容易。所以尝试交换外循环和内循环

标签: c# linq select filter


【解决方案1】:

如何使用 LINQ 选择黄色行,这意味着其中有“a” 第一个数组,第二个是“g”,第三个是“m”?

IEnumerable<string[]> result = arrData
    .Where(arr => arr?.Length > 2 && arr[0] == "a" && arr[1] == "g" && arr[2] == "m");

如何使用 LINQ 按一列中的值列表进行过滤 (意思是选择第一列中带有“a”或“b”的所有行)?

string[] firstColSearch = { "a", "b" };
IEnumerable<string[]> result = arrData
  .Where(arr => arr?.Length > 0 && firstColSearch.Contains(arr[0]));

【讨论】:

  • 您是否注意到它被存储为列? (不是行)
  • @JeroenvanLangen:我不这么认为。我认为 OP 正在逐行读取 CSV,逐值读取并将它们存储在字符串数组中
  • 将它们存储为行会更容易,因此您可以选择所有符合条件的行。
  • @JeroenvanLangen:但每个string[] 代表一行并包含所有值
  • Tim Schmelter 的解决方案在我按照 Jeroen van Langen 的建议将列表填充代码从列切换到行之后起作用。
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多