我有一个订阅实例数组@subscription_valids
和一个订阅播放器数组,看起来像这样:
array_subscribed_players = [{"name0" => "link1"}, {"name1"=>"link2"}, {"name2"=>"link3"}....]
我需要做的是:对于@subscription_valids
中的每个订阅:
@subscription_valids.each do |subscription|
我需要检查subscription.user.full_name
或subscription.user.full_name_inversed
是否匹配array_subscribed_player
哈希值中的某个键(例如“name0”,“name1”或“name2”)
如果匹配,那么我应该将相关的subscription
作为密钥存储在新数组的散列中,并将相关链接提取为此散列的值。我的最终输出应该是一个如下所示的数组:
[{subscription1 => "link1"}, {subscription2 => "link2}, ...]
否则,如果subscription.user.full_name
不匹配,我只会将订阅存储在故障数组中。
如何实现这一结果?
答案 0 :(得分:0)
您可以尝试以下操作:
valid = array_subscribed_players.select{|x| @subscription_valids.map(&:name).include?(x.keys.first)}
如果您需要在某处存储有效值和无效值:
valid, invalid = array_subscribed_players.partition{|x| @subscription_valids.map(&:name).include?(x.keys.first)}
答案 1 :(得分:0)
请参阅http://ruby-doc.org/core-2.2.3/Hash.html
如果哈希和eql,用户定义的类可以用作哈希键? 重写方法以提供有意义的行为。默认情况下, 单独的实例引用单独的哈希键。
所以我认为你应该覆盖你的.eql? @subscription_valids中的方法有意义的东西(如唯一的字符串)
我想不出一个Array方法所以你可以这样:
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