У меня возникла следующая проблема с использованием LINQ. Скажем, у меня есть набор чисел в диапазоне от одного до пяти: [1,2,4,5,0,3,1 ...]
. В этом массиве может быть любое число. Я хочу преобразовать этот массив в следующую структуру: [{number:0, count:5},{number:1, count:3}, {number:2, count:0}....]
. Если я использую GroupBy
, я пропустил запись для номера 2. Есть ли элегантный и эффективный способ сделать это с помощью LINQ?Группа по предопределенному набору ключей с использованием LINQ
0
A
ответ
2
Вам необходимо выполнить внешнее соединение между вашей коллекцией и «фиксированной» коллекцией, содержащей цифры от 0 до 5. Затем группируйте это и делайте подсчет.
+2
Да, это все. В терминах LINQ это будет 'fixedNumbers.GroupJoin (collection, x => x, x => x, (f, s) => new {Number = f, Count = s.Count()});' –
0
var arrayOfNumbers = new int[] {1, 5, 4, 5, 1, 0, 2, 3, 4, 5, 1,1,1};
var result =
from n in arrayOfNumbers
group n by n into g
select new { Number = g.Key, Count = g.Count() };
foreach (var item in result)
{
Console.WriteLine(String.Format("Number {0}: count {1}", item.Number, item.Count));
}
0
List<KeyValuePair<string, int>> pairs = new List<KeyValuePair<string,int>>();
for(int i = 0; i < 5; i++)
{
pairs.Add(new KeyValuePair<string, int>("number:" + i, arrayOfNums.Select(x => x == i).Count()));
}
Где arrayOfNums
это ваш массив значений между 0 и 5. результаты сохраняются в List<KeyValuePair>>
в формате, который вы хотите.
Вы можете улучшить это, вместо использования жестко закодированного 5
в цикле, вы можете использовать поиск наивысшего значения в массиве.
Смежные вопросы
- 1. Итерации по набору строк с использованием LINQ
- 2. Postgresql - Группа по набору столбцов
- 3. Группа с использованием Linq?
- 4. Группа по датам с использованием Linq
- 5. Группа по вводу строки с использованием linq
- 6. Условная группа По заявлению с использованием LINQ
- 7. PHP добавляет к предопределенному набору символов
- 8. Итерирование по набору ключей LinkedHashMap
- 9. Итерирование по набору ключей и переключение по набору записей
- 10. Группа по свойствам Linq
- 11. Группа Linq с использованием отражения
- 12. Левое внешнее объединение группы по набору данных с использованием linq
- 13. группа с использованием анонимного типа в Linq
- 14. группа по LINQ с графом
- 15. Группа LINQ по заданию
- 16. Группа Linq по подгруппе
- 17. Группа Linq по вопросу
- 18. Вложенная группа по LINQ
- 19. Группа LINQ по задаче
- 20. LINQ группа по First()
- 21. LINQ - группа по вопросам
- 22. группа по в LINQ
- 23. Группа Linq по заявлению
- 24. Группа Linq по выбору
- 25. LINQ группа по, заказ по
- 26. Query azure table по набору ключей строк
- 27. Scala Dispatcher - Привязать набор Актеров к предопределенному набору нитей
- 28. Группа по массиву внутри массива с использованием Linq
- 29. Группа словарей с Linq
- 30. Группа по имени Linq + C#
Ваш образец ввода не соответствует вашему образцу. Также вы говорите, что число колеблется от одного до пяти, но ваш образец ввода имеет ноль. –