Хобрук: Ваш путь к мастерству в программировании

Scala использует карту после groupBy

Учитывая этот код

val list = List(
    Person("John", "Paris", 1956);
    Person("Jane", "London", 1954);
    Person("James", "Paris", 1972);
    Person("Marie", "London", 1959);
)

Я хочу создать карту (ключ-> значение), в которой ключом является город, а значением является средний возраст людей, живущих в этом городе.

Я использовал метод groupBy:

val groupedByCity = list.groupBy(_.city);

Которые дают мне это:

Map(Paris -> List(Person(Jonh, Paris, 1956), Person(James, Paris, 1972)), London -> List( Person(Jane, London, 1954), Person(Marie, London, 1959)));

Как я могу переназначить это, чтобы отфильтровать нужную мне информацию, то есть средний возраст по городам?

Спасибо за помощь.

11.12.2014

Ответы:


1

Используйте .mapValues на карте с функцией, аргументом которой будет список людей для города. Внутри этой функции используйте .map, чтобы превратить его в список возрастов, затем .sum, чтобы вычислить общее количество, и разделите на размер списка.

11.12.2014
  • Я думаю, что я сделал это! Спасибо за помощь. Вот как я это сделал: code val mediumAgeByCity = groupedByCity.mapValues( p => p.map(2014-_.birth).sum/p.size); code 11.12.2014

  • 2

    Вы можете сделать это за один проход, используя

     groupedByCity.mapValues( p => (0.0 /: p){_ + 2014 - _.age} / p.length)
       }                                             
     //> res0: scala.collection.immutable.Map[String,Double] = Map(Paris -> 50.0, London -> 57.5)
    
    11.12.2014
    Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.