Arrays 比较数组与散列数组并输出新的散列数组
我有一个订阅实例数组Arrays 比较数组与散列数组并输出新的散列数组,arrays,ruby,hash,Arrays,Ruby,Hash,我有一个订阅实例数组@subscription\u valids和一个订阅播放器数组,如下所示: array_subscribed_players = [{"name0" => "link1"}, {"name1"=>"link2"}, {"name2"=>"link3"}....] 我需要做的是:对于@subscription\u valids中的每个订阅: @subscription_valids.each do |subscription| 我需要检查subscrip
@subscription\u valids
和一个订阅播放器数组,如下所示:
array_subscribed_players = [{"name0" => "link1"}, {"name1"=>"link2"}, {"name2"=>"link3"}....]
我需要做的是:对于@subscription\u valids
中的每个订阅:
@subscription_valids.each do |subscription|
我需要检查subscription.user.full\u name
或subscription.user.full\u name\u inversed
是否与array\u subscripted\u player
散列中的一个键匹配(在示例“name0”、“name1”或“name2”中)
如果匹配,那么我应该将相关的订阅
作为密钥存储在新数组中的散列中,并提取相关链接作为该散列的值。我的最终输出应该是如下所示的数组:
[{subscription1 => "link1"}, {subscription2 => "link2}, ...]
否则,如果subscription.user.full\u名称不匹配,我将只将订阅存储在失败数组中
如何实现此结果?您可以尝试以下方法:
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)}
看
如果哈希和eql?
方法被重写以提供有意义的行为。默认情况下,
单独的实例指的是单独的哈希键
所以我认为你应该重写你的.eql?@subscription_valids中的方法可用于有意义的内容(如唯一字符串)
我无法考虑数组方法,因此您可以这样做:
results=[]
失败=[]
@认购有效。每一笔认购有效|
数组|u订阅|u玩家。每个做|玩家|
如果player.keys.first==subscription.user.full_name | | player.keys.first==subscription.user.full_name_反转
结果播放器[player.keys.first]}
其他的
故障分区是这里的方法,但不需要splat(*
)<代码>a,b=[1,2]
将是a#=>1;b#=>2
因为这就是并行分配的工作原理。因为分区总是最多有2个嵌套数组,所以这将是一个足够的解决方案。
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