2015-10-13 153 views
0

我訂閱實例的數組@subscription_valids和訂閱的球員所組成的數組看起來像:比較哈希陣列陣列和outputing哈希值的新陣列

array_subscribed_players = [{"name0" => "link1"}, {"name1"=>"link2"}, {"name2"=>"link3"}....] 

我需要做的是:每個認購@subscription_valids

@subscription_valids.each do |subscription| 

我需要檢查,如果subscription.user.full_name,或者如果subscription.user.full_name_inversedarray_subscribed_player散列的一個關鍵(在爲例「NAME0」,「名1」或「名2」)相匹配。

如果匹配,那麼我應該將相關的subscription作爲關鍵字存儲在新陣列的散列中,並提取相關鏈接作爲此散列的值。我最後outpout應該是一個數組,看起來像這樣:

[{subscription1 => "link1"}, {subscription2 => "link2}, ...] 

否則如果subscription.user.full_name犯規的比賽我將只存儲在一個故障陣列訂閱。

我該如何達到這個結果?

回答

0

你可以嘗試以下方法:

valid = array_subscribed_players.select{|x| @subscription_valids.map(&:name).include?(x.keys.first)} 

Demo

如果您需要在一些地方保存有效和無效的值:

valid, invalid = array_subscribed_players.partition{|x| @subscription_valids.map(&:name).include?(x.keys.first)} 
+0

分區是去這裏的路但是不需要圖示('*')。 'a,b = [1,2]'將是'a#=> 1; b#=> 2',因爲這是並行分配的工作原理。因爲分區總是會有最多2個嵌套數組,這將是一個充分的解決方案。 – engineersmnky

0

http://ruby-doc.org/core-2.2.3/Hash.html

一我們如果使用散列和eql,er定義的類可以用作散列鍵? 方法被覆蓋以提供有意義的行爲。默認情況下, 單獨的實例引用單獨的散列鍵。

所以我認爲你應該重寫你的.eql?在@subscription_valids爲有意義(如一個唯一的字符串)

我想不出一個陣列的方法方法,以便你可以去這樣的:

demo

results = [] 
failures = [] 
@subscription_valids.each do |subscription| 
    array_subscribed_players.each do |player| 
     if player.keys.first == subscription.user.full_name || player.keys.first == subscription.user.full_name_inversed 
      results << { subscription => player[player.keys.first] } 
     else 
      failures << subscription 
     end 
    end 
end