我有一个数组数组:
x = [
["ready", 5], ["shipped", 1], ["pending", 1], ["refunded", 1],
["delivered", 23], ["scheduled", 1], ["canceled", 51]
]
我的排序数组是
order_array = [
"ready", "in_progress", "recieved", "shipped", "scheduled", "pick_up",
"delivered", "canceled", "failed", "refunded", "refund_failed"
]
我需要x
根据每个子数组中第一个元素的值进行排序。所需的排序数组是:
[
["ready", 5], ["shipped", 1], ["scheduled", 1], ["delivered", 23],
["canceled", 51], ["refunded", 1]
]
使用sort_by
不会导致所需的排序,它会导致相同的数组。
result = x.sort_by {|u| order_array.index(u)}
# => [
# ["ready", 5], ["shipped", 1], ["pending", 1], ["refunded", 1],
# ["delivered", 23], ["scheduled", 1], ["canceled", 51]
# ]
h = x.to_h
# => {"ready"=>5,
# "shipped"=>1,
# "pending"=>1,
# "refunded"=>1,
# "delivered"=>23,
# "scheduled"=>1,
# "canceled"=>51}
order_array.map{|key| [key, h[key]] if h.key?(key)}.compact
# => [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
或者
h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", 5],
# "shipped"=>["shipped", 1],
# "pending"=>["pending", 1],
# "refunded"=>["refunded", 1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", 1],
# "canceled"=>["canceled", 51]}
order_array.map{|k| h[k]}.compact
#=> [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
或者
h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", 5],
# "shipped"=>["shipped", 1],
# "pending"=>["pending", 1],
# "refunded"=>["refunded", 1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", 1],
# "canceled"=>["canceled", 51]}
h.values_at(*order_array).compact
#=> [["ready", 5],
# ["shipped", 1],
# ["scheduled", 1],
# ["delivered", 23],
# ["canceled", 51],
# ["refunded", 1]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句