2014-09-08 2 views
1

Мне нужен сортировать по алфавиту (по возрастанию) и количеству (по убыванию) в том же списке.Сортировать по алфавиту и количеству в том же списке

Мой старт образец:

using System; 
using System.Collections.Generic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public class Item 
     { 
      public string Name { get; set; } 
      public int Age { get; set; } 
     } 
     static void Main(string[] args) 
     { 
      var items = new List<Item> 
      { 
       new Item {Name = "CItem", Age = 10}, 
       new Item {Name = "AItem", Age = 10}, 
       new Item {Name = "BItem", Age = 10}, 
       new Item {Name = "AItem", Age = 10}, 
       new Item {Name = "CItem", Age = 10}, 
       new Item {Name = "AItem", Age = 10}, 
       new Item {Name = "AItem", Age = 10}, 
       new Item {Name = "BItem", Age = 10}, 
       new Item {Name = "BItem", Age = 10}, 
       new Item {Name = "BItem", Age = 10}, 
       new Item {Name = "BItem", Age = 10} 
      }; 

      items.Sort((x, y) => String.CompareOrdinal(x.Name, y.Name)); 
     } 
    } 
} 

Этот пример заказывается только в алфавитном порядке.

Ожидаемый результат

  1. Name = "Bitem", Age = 10
  2. Name = "Bitem", Age = 10
  3. Name = "Bitem", Age = 10
  4. Name = "Bitem", Age = 10
  5. Name = "Bitem", Age = 10
  6. Name = "AItem", Age = 10
  7. Name = "AItem", Age = 1 0
  8. Name = "AItem", Age = 10
  9. Name = "AItem", Age = 10
  10. Name = "CItem", Age = 10
  11. Name = "CItem", Age = 10

Любое предложение?

+2

Почему BItem подходит к AItem? –

+0

@ LasseV.Karlsen, потому что у него больше предметов. – Gus

ответ

2

Здесь вы можете группировать элементы по имени, заказывать группы по их размеру, а затем сглаживать коллекцию групп только в элементах этих групп.

var query = items.GroupBy(item => item.Name) 
    .OrderByDescending(group => group.Count()) 
    .SelectMany(group => group); 
+1

ваш образец не использует тот же список. – Gus

+0

@Gus Правильно, это не так. Вы более чем можете внести материализацию запроса в список и сохранить его в одной и той же переменной, если это то, что вам нужно сделать. – Servy

+1

Вы должны добавить ThenBy (group => group.Key) в качестве таймера. – brz

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