2016-03-01 3 views
-2

Есть ли способ сортировки списка строк, по количеству количества словКак сортировать список строк по количеству слов подсчитывать в C#

var list = new List<string>(); 
    list.Add("The quick brown"); // 5 
    list.Add("brown fox jumps over"); // 4 
    list.Add("quick brown fox jumps over the lazy"); //1 
    list.Add("The quick brown fox jumps") // 3 
    list.Add("fox jumps over the lazy dog");  // 2 

foreach(var item in list) 
{ 
console.Writeline(item); 
} 

Есть ли способ, чтобы генерировать выходной сигнал без использования другой список или цикл для сортировки

quick brown fox jumps over the lazy 
fox jumps over the lazy dog 
The quick brown fox jumps 
brown fox jumps over 
The quick brown 
+0

Что вы пробовали? Вы знаете правильный результат, но опубликовали код, который вас не доставит. Например, если вы ослабляете свои ограничения на «другой список или цикл», можете ли вы реализовать логику? – Guvante

ответ

2

Предполагая, что строка не может быть нулевой, ниже должно работать.

foreach(var item in list.OrderByDescending(q => q.Split(' ').Length)) 
{ 
    console.Writeline(item); 
} 
+1

'Split' возвращает' string [] ', поэтому вы можете использовать' Length' здесь вместо 'Count()'. – Guvante

+0

Удивительный! это было слишком быстро. Спасибо друг. – Abbas

1

Если вы хотите отсортировать по количеству слов:

list.Sort((a, b) => b.Split(' ').Length - a.Split(' ').Length); 

Или, если вы хотите сортировать только по длине строки (которая может быть то, что вы хотите, а)

list.Sort((a, b) => b.Length - a.Length); 
1

Вы можете использовать метод Сортировка:

your_list.Sort((x,y)=>y.Split(' ').Length - x.Split(' ').Length); 

your_list.ForEach(Console.WriteLine); 
0

Если вы хотите инкапсулировать логику в несколько более многоразовом режиме, выполните команду IComparer<T> interface.

public class WordCountComparer : IComparer<String> 
{ 
    public Int32 Compare(String a, String b) 
    { 
     var split = new[] { ' ' }; 

     var aCount = String.IsNullOrWhiteSpace(a) ? 0 : a.Split(split).Length; 
     var bCount = String.IsNullOrWhiteSpace(b) ? 0 : b.Split(split).Length; 

     if (aCount == bCount) { return 0; } 
     if (aCount < bCount) { return 1; } else { return -1; } 
    } 
} 

Вы можете передать экземпляр вашего класса непосредственно к List<T>.Sort method, и он будет сортировать список на месте.

list.Sort(new WordCountComparer());