2014-12-20 4 views
0

Скажем, у меня есть этот массив объектов:Группировка массив по типу в словаре

 var input = new object[] 
     { 
      "Hello", 
      123,     
      true, 
      "Hats", 
      12,34, 
      '!' 
     }; 

Что я тогда хочу сгруппировать по типам, а затем возвращает словарь с типом в качестве ключа и числа появлений каждого типа в качестве значения. Как мне это сделать? Теперь у меня есть массив в словаре, но отсюда я немного зациклился на том, что с ним делать.

ответ

5

Просто группа по Type и использовать ToDictionary метод:

input.GroupBy(x => x.GetType()).ToDictionary(x => x.Key, x => x.Count()); 

Обычно, когда вы используете GroupBy к группе на основе ссылочного типа вам нужно либо переопределить Equals и GetHashCode метод по типу, или реализовать пользовательский сопоставитель, чтобы получить ожидаемое поведение. Но, к счастью, класс Type уже делает это. Таким образом, это будет работать, как ожидалось.

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