2012-02-07 5 views
2

['a'=> false'b' => false'c' => false、......のようなハッシュ構造を持っています。 私の条件は以下のとおりです。ウォッチャーからスレッドの実行アレイ

  • 私は各要素ごとにマルチスレッドを使用して、特定の条件に基づいて真の「false」に作るためのコードのいくつかの部分を実行しています。
  • このループは、すべての要素の値が 'true'または特定の 'timeout'になるまで続きます。
  • 私はこれらの '本当の'価値のある要素のために別のコードを実行しているので、値が '真'になる各ループでそれらのキーを収集するウォッチャーが必要です。

しかし、私が書いているコードにはruby-ismはありません。それはJavaコードを書くような感じです。 ルビー・アイム・アプローチのお手伝いをしてください。

答えて

0

ここでは、active_supportから抽出した2つのハッシュの違いを示すコードを示します。

今これがあなたのループの各反復間の差を検出するために使用する方法である
# from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/diff.rb 
def hash_diff(h1, h2) 
    h1.dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| h1.has_key?(k) }) 
end 

:あなたは競合状態を避けるために、このコードのためにミューテックスを使用する必要がありますし、他の厄介なことがあり

previous ||= my_hash 
diff = hash_diff(my_hash, previous) 
puts "Difference: #{diff.inspect}" unless diff.keys.empty? 
previous = my_hash 

注意エラー。

関連する問題