Ruby 2.0.0 リファレンスマニュアル > ライブラリ一覧 > tsortライブラリ > TSortモジュール > tsort_each

instance method TSort#tsort_each

tsort_each {|node| ...} -> nil[permalink][rdoc]

tsort メソッドのイテレータ版です。 obj.tsort_each は obj.tsort.each と似ていますが、 ブロックの評価中に obj が変更された場合は予期しない結果になる ことがあります。

tsort_each は nil を返します。 閉路が存在するとき、例外 TSort::Cyclic を起こします。

[EXCEPTION] TSort::Cyclic:
閉路が存在するとき、発生します.

使用例

require 'tsort'

class Hash
  include TSort
  alias tsort_each_node each_key
  def tsort_each_child(node, &block)
    fetch(node).each(&block)
  end
end

non_sort = {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}

non_sort.tsort_each {|node|
  non_sort.tsort_each_child(node){|child|
    printf("%d -> %d\n", node, child)
  }
}

# 出力
#=> 2 -> 3
#=> 1 -> 2
#=> 1 -> 3