C# LINQ 从字符串数组列表中选择
Posted
技术标签:
【中文标题】C# LINQ 从字符串数组列表中选择【英文标题】:C# LINQ select from list of arrays of strings 【发布时间】:2022-01-18 19:51:00 【问题描述】:我有这个数据
保留在字符串数组列表中: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 个值。
-
如何使用 LINQ 选择黄色行,即第一个数组中有“a”,第二个数组中有“g”,第三个数组中有“m”?
如何使用 LINQ 按一列中的值列表进行过滤(即选择第一列中包含“a”或“b”的所有行)?
我可以更改代码并创建列表/字典/任何更合适的列表。
【问题讨论】:
如果没有 LINQ,你会怎么做?您是否尝试过任何方法来实现这一目标? 您自己做的很困难,因为您将数据存储在列中,而不是行中。将其存储为行使其更容易。所以尝试交换外循环和内循环 【参考方案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 的建议将列表填充代码从列切换到行之后起作用。以上是关于C# LINQ 从字符串数组列表中选择的主要内容,如果未能解决你的问题,请参考以下文章
用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]