4

前の値を追跡するためにループで使用される一時変数を初期化する最良の方法は何ですか?

これは私がそれを行う方法の例ですが、よりクリーンな方法があると感じています。前のショーが別の日にあった場合にのみ、ショーの日付を印刷したい

temp_show_date = ""
shows.each do |show|
  if temp_show_date != show.date
    puts show.date
  end
  puts show.name
  temp_show_date = show.date
 end
4

5 に答える 5

1

したがって、2 つの連続する要素の各グループを反復処理する必要があります。Enumerable#each_cons を試す

shows.each_cons(2) do |first_show, second_show|
  if first_show.date != second_show.date
    puts "these two aren't on the same day!"
  end
end
于 2013-05-03T23:21:32.543 に答える
1

これは 1 つのアプローチを示しています (単純な配列を使用します。特定のオブジェクト タイプに適応する必要があります)。

arr = [1,1,2,1,2,2,3,1]
arr.each_cons(2) do |a,b|
  puts b unless b == a
end
于 2013-05-03T23:21:35.693 に答える
0
shows.each_cons(2) do |s1, s2|
  puts s2.date unless s1.date == s2.date
  puts s2.name
end

dummy最初のものを印刷するには、日付が空のダミーの show を用意し、 [dummy, *shows]代わりにを使用できますshows

于 2013-05-03T23:22:24.033 に答える