суббота, 17 марта 2012 г.

Ruby Module Enumerable

Это миксин.
Имеет следующие неочевидные методы:

.chunk - возвращает ассоциативный массив, в котором находится ключ и массив элементов для которых характерен этот ключ:

[3,1,4,1,5,9,2,6,5,3,5].chunk {|n|
  n.even?
}.each {|even, ary|
  p [even, ary]
}
#=> [false, [3, 1]]
#   [true, [4]]
#   [false, [1, 5, 9]]
#   [true, [2, 6]]
#   [false, [5, 3, 5]]
Поскольку первый два числа массива 3,1 в чанке вернули тру, они попали в результующий массив под один ключ тру, потом только 4 попала под фолс и т.д. А вот у нас есть файл со словарем, в котором находятся в алфавитном порядке определенные слова.
open("/usr/share/dict/words", "r:iso-8859-1") {|f|
  f.chunk {|line| line.ord }.each {|ch, lines| p [ch.chr, lines.length] }
}
#=> ["\n", 1]
#   ["A", 1327]
#   ["B", 1372]
#   ["C", 1507]
#   ["D", 791]
#   ...
Так в результующем массиве под ключем кода буквы находится массив слов, которые начинаются на эту букву.

Есть два специальных ключа, которые может вернуть блок ожидаемый чанком:

  • nil and :_separator specifies that the elements are dropped.
  • :_alone specifies that the element should be chunked as a singleton.

Комментариев нет:

Отправить комментарий