Найти частоты определенного значения свойства в списке <объект>

1

Как найти частоту свойства Age для List<Person>?

var people = new List<Person>
{
    new Person {Name = "Jonh", Age = 10},
    new Person {Name = "Jack", Age = 12},
    new Person {Name = "Sara", Age = 10},
    new Person {Name = "Dave", Age = 10},
    new Person {Name = "Jude", Age = 12}
};

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Frequency { get; set; }
}

Поэтому я хочу, чтобы объекты Person были обновлены, чтобы иметь значение Frequency.

Name             Age              Frequency      
----------------------------------------------
Jonh             10               3              
Jack             12               2              
Sara             10               3              
Dave             10               3              
Jude             12               2     
Теги:
linq
frequency
list

2 ответа

4
Лучший ответ
var countByAge = people.GroupBy(x => x.Age)
                       .ToDictionary(g => g.Key, g => g.Count());

foreach(var person in people)
{
    person.Frequency = countByAge[person.Age];
}
  • 0
    разве нет пути без итерации?
  • 1
    Нет, вы должны повторять people хотя бы один раз, иначе как бы вы установили Frequency для каждого экземпляра?
Показать ещё 1 комментарий
1

попробуйте вот так:

foreach(var item in people)
{
  item.Frequency = people.Count(x=>x.Age == item.Age);
}
  • 3
    Извините, но менее эффективное решение O (n ^ 2) .
  • 0
    да, я пытался проложить путь без петли, но не смог
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню