2014-12-26 2 views
-3
  1. Состояние, в котором максимальные гласные должны быть первыми.Необходимо сортировать, исходя из следующих условий:

  2. Если нет гласных букв одинаковы, то

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

    • Если длина тоже такая же, то сортировка основана на первом символе состояния имя.

    • Если первый символ тоже тот же, то место в соответствии с их вхождением в список.

здесь код

Public static void Main(string[] args) 
{ 

    List<ClsState> states = new List<ClsState>(); 
    states.Add(new ClsState("Gujarat")); 
    states.Add(new ClsState("Maharashtra")); 
    states.Add(new ClsState("Punjab")); 
    states.Add(new ClsState("AndhraPradesh")); 
    states.Add(new ClsState("Telengana")); 
    var result = states.OrderBy(a => a.StateName.Length) 
         .ThenBy(a => a.StateName); 

} 
+0

Вы требования следующие четыре уровня сортировки, но вы имеют только два критерия сортировки. –

+1

Используйте OrderBy - Comparer (https://code.msdn.microsoft.com/SQL-Ordering-Operators-050af19e) и используйте свой собственный сопоставитель (добавьте свою логику в свой класс товарищей). – sudhAnsu63

+0

Не думайте, что это плохой вопрос, но это поможет увидеть примеры результатов, которые демонстрируют ваши варианты использования. –

ответ

1
static void Main(string[] args) 
    { 
     List<ClsState> states = new List<ClsState> 
     { 
      new ClsState("Gujarat"), 
      new ClsState("Maharashtra"), 
      new ClsState("Punjab"), 
      new ClsState("AndhraPradesh"), 
      new ClsState("Telengana"), 
     }; 

     var vowls = new List<char> { 'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y' }; 
     var sorted = states 
      .Select(s => new Tuple<int, ClsState>(s.StateName.ToCharArray().Where(l => vowls.Contains(l)).Count(), s)) 
      .OrderByDescending(i => i.Item1) 
      .ThenByDescending(i => i.Item2.StateName.Length) 
      .ThenBy(i => i.Item2.StateName[0]) 
      .ThenByDescending(i => states.Where(s => s.StateName == i.Item2.StateName).Count()); 
    } 

Как просили в комментариях ниже печатая названия:

foreach(var state in sorted) 
    { 
     Console.WriteLine(state.Item2.StateName); 
    } 
+0

не работает ................ –

+0

Что именно не работает? Он сортируется по числу гласных (от самого большого числа до самого низкого). Затем по длине (от самого длинного до кратчайшего). Затем по первой букве (по возрастанию: от a до z). Наконец, сколько раз это происходит в коллекции. – PiotrWolkowski

+0

dont mind pls mak it sure для печати на экране консоли я попробовал ... как foreach (элемент var в отсортированном) { Console.WriteLine (отсортировано.FirstOrDefault()); } –

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