C# 按字符串值筛选二维字符串矩阵的行

C# 按字符串值筛选二维字符串矩阵的行,c#,.net,arrays,linq,jagged-arrays,C#,.net,Arrays,Linq,Jagged Arrays,因此,我有一个定义为String[]data\u set\u examples的2D数组,其中包含以下数据: Sunny,Hot,High,Weak,No Sunny,Hot,High,Strong,No Overcast,Hot,High,Weak,Yes Rain,Mild,High,Weak,Yes Rain,Cool,Normal,Weak,Yes ... 我想按特定值筛选行,例如包含“Hot”的行(按列索引1) 我知道一种可能是使用LINQ。虽然我不熟悉,但我尝试了以下方法,但是没有

因此,我有一个定义为
String[]data\u set\u examples
的2D数组,其中包含以下数据:

Sunny,Hot,High,Weak,No
Sunny,Hot,High,Strong,No
Overcast,Hot,High,Weak,Yes
Rain,Mild,High,Weak,Yes
Rain,Cool,Normal,Weak,Yes
...
我想按特定值筛选行,例如包含“Hot”的行(按列索引1)

我知道一种可能是使用LINQ。虽然我不熟悉,但我尝试了以下方法,但是没有进行过滤

var result = from u in data_set_examples
                         where u[column_index].Equals(attribute_value)
                         select u;

我做错了什么?还有其他方法吗?

您的代码看起来不错,我认为问题在于您检查过滤结果的方式

当你使用

foreach (string[] s in result) 
{ 
    Console.WriteLine(s); 
}
您只是在写
string[]

但是,您应该看到结果中的
字符串[]
字符串[]

你可以用两种方法来做这件事

foreach (string[] s in result)
{
     //concatenate all the values in s
     Console.WriteLine(string.Join(",", s));
}


我已经试过了,刚刚确认它有效:

 string[][] data_set_examples = new string[][]{
                new string[]{"Sunny", "Hot", "High", "Weak", "No"},
                new string[]{"Sunny", "Hot", "High", "Strong", "No"},
                new string[]{"Overcast", "Hot", "High", "Weak", "Yes"},
                new string[]{"Rain", "Mild", "High", "Weak", "Yes"},
                new string[]{"Rain", "Cool", "Normal", "Weak", "Yes"},
            };
            IEnumerable<string[]> result = from u in data_set_examples
                         where u[1].Equals("Hot")
                         select u;
            foreach (string[] s in result) {
                foreach (string part in s)
                    Console.Write(part + " ");
                Console.WriteLine();
            }
            Console.Read();

你的代码看起来不错。您确定
列索引
正确吗?您是否尝试过设置断点并检查
data\u set\u examples
中的数据,以确保它是您认为的那样?您如何证明这一点:“但是没有进行过滤”?为什么不创建一个类来保存数据、当前矩阵行所保存的内容,并从中创建一个列表或任何IEnumerable?这绝对是反面向对象的。过滤、转换等会容易得多。我检查的方式:foreach(结果中的字符串[]s){Console.WriteLine(s);}问题在于您进行检查,用这个进行检查,并查看结果
foreach(结果中的字符串[]s){Console.WriteLine(string.Join(“,”,s));}
好的,谢谢你指出这一点。这就是问题所在。成功了。
 string[][] data_set_examples = new string[][]{
                new string[]{"Sunny", "Hot", "High", "Weak", "No"},
                new string[]{"Sunny", "Hot", "High", "Strong", "No"},
                new string[]{"Overcast", "Hot", "High", "Weak", "Yes"},
                new string[]{"Rain", "Mild", "High", "Weak", "Yes"},
                new string[]{"Rain", "Cool", "Normal", "Weak", "Yes"},
            };
            IEnumerable<string[]> result = from u in data_set_examples
                         where u[1].Equals("Hot")
                         select u;
            foreach (string[] s in result) {
                foreach (string part in s)
                    Console.Write(part + " ");
                Console.WriteLine();
            }
            Console.Read();
Sunny Hot High Weak No
Sunny Hot High Strong No
Overcast Hot High Weak Yes