Есть ли Ruby-Way ™ для обработки петель такого типа? - PullRequest
1 голос
/ 08 марта 2011

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

Пример ниже работает, но он выглядит довольно не элегантно для Ruby. Я уверен, что должен быть лучший способ сделать это;)

#!/usr/bin/ruby
foo = [1,1,1,1,2,2,2,3,3]

i = 0;

f = foo[i]
comp = f

while(i < foo.count) do
  puts "Section #{f}";

  while(f == comp) do
    puts f
    i += 1
    f = foo[i]
  end

  comp = f
end

Желаемый вывод

Section 1
1
1
1
1
Section 2
2
2
2
Section 3
3
3

Я надеялся, что существуют какие-то методы экземпляра Array#current или Array#next, но похоже, что объекты Ruby Array не содержат внутреннего итератора.

Ответы [ 2 ]

8 голосов
/ 08 марта 2011
foo.group_by{|e| e }.each do |header, group| 
  puts "Section #{header}"
  puts group.join("\n")
end
1 голос
/ 08 марта 2011
foo = [1,1,1,1,2,2,2,3,3]
j = 0
foo.each  do |i|
  unless j == i
    puts "Section #{i}"
    j = i
  end
  puts i
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...