如何使用where函数过滤锯齿数组
本文关键字:数组 过滤 函数 何使用 where | 更新日期: 2023-09-27 18:11:49
我有一个锯齿数组,看起来像这样:
string[][] list = new string[d.Rows.Count + 1][];
int c = 0;
while (c < d.Rows.Count)
{
list[c] = new string[]
{
d.Rows[c].ItemArray[2].ToString(),
d.Rows[c].ItemArray[1].ToString(),
d.Rows[c].ItemArray[4].ToString(),
d.Rows[c].ItemArray[5].ToString(),
d.Rows[c].ItemArray[7].ToString(),
d.Rows[c].ItemArray[3].ToString(),
d.Rows[c].ItemArray[14].ToString()
};
c += 1;
}
return list;
现在,对于一个新的要求,我只需要这个数组中在这个位置的值:list[x][0]等于以下任何字符串:"Text", "FullText", "FullMatch"
我从一个常规数组开始,我可以这样做:但它显然不适用于锯齿数组。
string[][] newlist = list.where(item => item.equals("Text");
有谁知道如何扩展到我的情况?
您可以对list
执行where操作,该操作将遍历每个一维数组,然后将元素0
与给定的字符串进行比较。
string[][] newlist = list
.Where(item => item[0].Equals("Text")
|| item[0].Equals("FullText")
|| item[0].Equals("FullMatch"))
.ToArray();
在一些示例数据上测试了如下所示:
var list = new string[][]
{
new string[] { "Text", "A", "B", "C", "D" },
new string[] { "None", "Z", "C" },
new string[] { "FullText", "1", "2", "3" },
new string[] { "FullMatch", "0", "A", "C", "Z" },
new string[] { "Ooops", "Nothing", "Here" },
};
string[][] newlist = list.Where(item => item[0].Equals("Text")
|| item[0].Equals("FullText")
|| item[0].Equals("FullMatch")).ToArray();
// now display all data...
foreach (string[] row in newlist)
{
Console.Write("Row: ");
foreach (string item in row)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
可以正常工作,输出为:
Row: Text A B C D
Row: FullText 1 2 3
Row: FullMatch 0 A C Z
如果您想要一个完全基于linq的解决方案,那么我认为以下应该可以做到这一点(尽管我还没有测试过,因为我不知道变量d
指的是什么):
var res =
(from c in Enumerable.Range(0, d.Rows.Count)
let list = new string[] {
d.Rows[c].ItemArray[2].ToString(),
d.Rows[c].ItemArray[1].ToString(),
d.Rows[c].ItemArray[4].ToString(),
d.Rows[c].ItemArray[5].ToString(),
d.Rows[c].ItemArray[7].ToString(),
d.Rows[c].ItemArray[3].ToString(),
d.Rows[c].ItemArray[14].ToString()
}
where list[0] == "Text" || list[0] == "FullText" || list[0] == "FullMatch"
select list).ToArray();
锯齿数组只是数组的数组,所以你可以使用LINQ来处理它。唯一的技巧是单个项将是数组(表示列)。在使用Where
之后,您可以使用ToArray
将结果转换回数组:
string[][] newlist = list.Where(item => item[0] == "Text" || ... ).ToArray();