Просмотрев коллекцию ИНЦ


Я учусь немного Скала, написав небольшую карточную игру. Что я хочу сделать, это проверить, что проходимый[команда] , поставляемые имеет одинаковое количество членов команды для каждой команды.

Как я могу убрать?

val teamSizes = teams.map(_.members.size)
require(teamSizes.foldLeft((true, teamSizes.head)) {
  (tuple, lastSize) =>
    val (b, size) = tuple
    (b && size == lastSize, lastSize)
}._1)


291
5
задан 26 июля 2011 в 08:07 Источник Поделиться
Комментарии
2 ответа

Я придумал альтернативу, которая является красивой и компактной:

val teamSizes = teams.map(_.members.size)
require(teamSizes.forall(_ == teamSizes.head))

4
ответ дан 28 июля 2011 в 06:07 Источник Поделиться

Альтернативный подход:

require (teamSizes.min == teamSizes.max)

но ỳour форалл-решение лучше выражает идею, что все члены имеют одинаковый размер.

И без измерения его, или пытается расследовать мое предположение, я думаю, что мой подход проходит два раза в коллекции, что может быть недостатком для больших семейств или если выполняется миллион раз. Тем более в этом примере.

Но может быть, возможно, для Модель ограничение на ваш дизайн, так что все команды получают право размер с самого начала?

5
ответ дан 28 июля 2011 в 01:07 Источник Поделиться