2016-11-08 3 views
0

Я ищу, если строка в stringarray содержит ключевое слово. Если строка получает совпадение, я хочу, чтобы массив (ы), который была найдена в строке, выводился на консоль.C# как написать весь массив, если строка содержит ключевое слово

Sofar Мне удалось вывести каждую строку, содержащую ключевое слово в stringarray.

Я попытался обойти эту проблему путем вывода insteed массива, но затем я получаю сообщение «System.String []»

Однако, это не мое намерение. Я хотел, чтобы массив отображался. Интересно, как я могу это сделать?

// Извините за плохой английский.

Вот соответствующие части моего кода:

List<string[]> loggbok = new List<string[]> { }; 
    string[] log = new string[3]; //date, title, post 
    DateTime date = DateTime.Now; 
    log[0] = "\n\tDate: " + date.ToLongDateString() + " Time: " + date.ToShortTimeString(); 
    Console.Write("\tTitle: "); 
    log[1] = "\tTitle: " + Console.ReadLine(); 
    Console.Write("\tPost: "); 
    log[2] = "\tPost: " + Console.ReadLine(); 
    loggbok.Add(log); 
    log = new string[3]; 
    Console.Write("\n\tSearch: "); 
    string keyWord; 
    keyWord = Console.ReadLine(); 
    foreach (string[] item in loggbok) 
    { 
     foreach (var s in item) 
     { 
      if (s.Contains(keyWord)) 
      { 
       Console.WriteLine(item); 
      } 
     } 
    }`enter code here` 

ответ

2

Для отображения весь массив попробовать это:

Console.WriteLine(String.Join("\r\n", item)); 

Вы можете фильтровать массив так:

Console.WriteLine(String.Join("\r\n", item.Where(item => item.Contains(keyWord)).ToArray()); 

или

string[] filtered = item.Where(s => s.Contains(keyWord)).ToArray(); 
Console.WriteLine(String.Join("\r\n", filtered)); 

Если вы хотите, чтобы фильтровать весь loggbok (список строковых массивов) использовать расширение SelectMany.

string[] filtered = loggbok.SelectMany(s => s.Contains(keyWord)).ToArray(); 
Console.WriteLine(String.Join("\r\n", filtered)); 
+0

Это было прекрасно! Я использовал «Console.WriteLine (String.Join (« \ r \ n », item)); Сообщение отображается, как я надеялся, но сообщение отображается дважды. Ты знаешь почему? – Gobban

+0

Ничего, теперь я стал ленивым ... ха-ха! "ломать;" починил это. Спасибо ;) – Gobban

0

Если я правильно понимаю ваш вопрос, вы хотите, чтобы весь массив, в котором ключевое слово было найдено. Что вы делаете неправильно, вы заявляете Console.WriteLine(item), который будет печатать только этот предмет.

Вместо этого создайте функцию, которая возвращает true, если ключевое слово было найдено в этом массиве и false, если этого не произошло. Ваш код будет выглядеть примерно так:

string keyWord; 
keyWord = Console.ReadLine(); 
foreach (string[] item in loggbok) 
{          
    if (checkItem(item)) { 
     for(int i = 0; i < item.Length; i++){ 
      Console.WriteLine(item[i]); 
     } 
    } 
} 

public bool checkItem(string[] item, string keyWord) { 
    foreach(var s in item) { 
    if(s.Contains(keyWord)) 
     return true; 
    } 
    return false; 
} 

Это может вам помочь.

Смежные вопросы