Enumerable#sequenced_group_by
module Enumerable
# like general <tt>group_by</tt>, but keeps order of original collection
def sequenced_group_by
groups, hash = [], {}
each do |element|
key = yield(element)
groups << [key, hash[key]=[]] unless hash.has_key?(key)
hash[key] << element
end
groups
end
end
Example
def test_sequenced_group_by
input = ["a2", "c1", "b1", "f1", "a1"]
result = [["a", ["a2", "a1"]], ["c", ["c1"]], ["b", ["b1"]], ["f", ["f1"]]]
assert_not_equal result, input.group_by{|x| x.at(0)}
assert_equal result, input.sequenced_group_by{|x| x.at(0)}
end
Ярлыки: code, ruby, rubyonrails
Комментарии: 0:
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница