2015-01-06 2 views
0

Таким образом, у меня есть 2D массив определен как String[][] data_set_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 
... 

Я хотел бы, чтобы отфильтровать строки по определенному значению, например, строки, содержащие «Горячий» (по индексу столбца 1)

Я понимаю, что одной возможностью может быть использование LINQ. Хотя я не знаком, я пробовал следующее, однако фильтрация не выполняется.

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

что я делаю неправильно? и есть ли альтернативный метод?

+0

Ваш код выглядит нормально. Вы уверены, что 'column_index' верен? Пробовали ли вы установить точку останова и проверить данные в 'data_set_examples', чтобы убедиться, что это так? –

+0

Как вы это доказываете: «однако фильтрация не выполняется»? – dotctor

+1

Почему бы просто не создать класс, содержащий данные, что в настоящее время находится в строке матрицы, и создать из него список или любой IEnumerable? Это абсолютно анти-объектно-ориентированное. Было бы намного проще фильтровать, преобразовывать и т. Д. –

ответ

1

Ваш код выглядит хорошо, я думаю, проблема в том, чтобы проверить ваш результат фильтрации.

Когда используется

foreach (string[] s in result) 
{ 
    Console.WriteLine(s); 
} 

вы просто пишете имя типа string[]

однако вы должны видеть в тех string[], которые находятся внутри вашего результата (string[][])

вы можете сделать это в в двух направлениях

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

или

foreach (string[] s in result) 
{ 
    //iterate through strings in s and print them 
    foreach (string s1 in s) 
    { 
     Console.Write(s1 + " "); 
    } 
    Console.WriteLine(); 
} 
+1

Хорошо, спасибо, что указали это. это была проблема. это сработало. – User49230

1

Я попробовал это, и только подтвердил, что он работает:

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