我想过滤和排序哈希数组:
[
{"_id"=>"THAILAND", "cities"=>["BANGKOK", "CHIANGMAI"]},
{"_id"=>"MALAYSIA", "cities"=>["JAKARTA", "KUALA_LUMPUR"]},
{"_id"=>"JAPAN", "cities"=>["HOKKAIDO", "FUKUOKA", "TOKYO", "IBARAKI", "ISHIGAKI", "OSAKA", "KUMAMOTO", "KAGOSHIMA", "NAGOYA", "OKINAWA"]},
{"_id"=>"HONGKONG", "cities"=>["HONGKONG"]},
{"_id"=>"KOREA", "cities"=>["SEOUL", "BUSAN"]},
{"_id"=>"TAIWAN", "cities"=>["KAOHSIUNG", "TAIPEI"]},
{"_id"=>"AUSTRALIA", "cities"=>["MELBOURNE", "GOLD_COAST", "PERTH", "SYDNEY"]},
{"_id"=>"MACAU", "cities"=>["MACAU"]},
{"_id"=>"SINGAPORE", "cities"=>["SINGAPORE"]}
]
Run Code Online (Sandbox Code Playgroud)
根据数组:
["JAPAN", "THAILAND", "KOREA", "TAIWAN", "AUSTRALIA", "MACAU", "SINGAPORE"]
Run Code Online (Sandbox Code Playgroud)
预期的结果是:
[
{"_id"=>"JAPAN", "cities"=>["HOKKAIDO", "FUKUOKA", "TOKYO", "IBARAKI", "ISHIGAKI", "OSAKA", "KUMAMOTO", "KAGOSHIMA", "NAGOYA", "OKINAWA"]},
{"_id"=>"THAILAND", "cities"=>["BANGKOK", "CHIANGMAI"]},
{"_id"=>"KOREA", "cities"=>["SEOUL", "BUSAN"]},
{"_id"=>"TAIWAN", "cities"=>["KAOHSIUNG", "TAIPEI"]},
{"_id"=>"AUSTRALIA", "cities"=>["MELBOURNE", "GOLD_COAST", "PERTH", "SYDNEY"]},
{"_id"=>"MACAU", "cities"=>["MACAU"]},
{"_id"=>"SINGAPORE", "cities"=>["SINGAPORE"]}
]
Run Code Online (Sandbox Code Playgroud)
我怎么能以优雅的方式做到这一点?
这就是我计划实现它的方式.
candidates = [
{"_id"=>"THAILAND", "cities"=>["BANGKOK", "CHIANGMAI"]},
{"_id"=>"MALAYSIA", "cities"=>["JAKARTA", "KUALA_LUMPUR"]},
{"_id"=>"JAPAN", "cities"=>["HOKKAIDO", "FUKUOKA", "TOKYO", "IBARAKI", "ISHIGAKI", "OSAKA", "KUMAMOTO", "KAGOSHIMA", "NAGOYA", "OKINAWA"]},
{"_id"=>"HONGKONG", "cities"=>["HONGKONG"]},
{"_id"=>"KOREA", "cities"=>["SEOUL", "BUSAN"]},
{"_id"=>"TAIWAN", "cities"=>["KAOHSIUNG", "TAIPEI"]},
{"_id"=>"AUSTRALIA", "cities"=>["MELBOURNE", "GOLD_COAST", "PERTH", "SYDNEY"]},
{"_id"=>"MACAU", "cities"=>["MACAU"]},
{"_id"=>"SINGAPORE", "cities"=>["SINGAPORE"]}
]
a = ["JAPAN", "THAILAND", "KOREA", "TAIWAN", "AUSTRALIA", "MACAU", "SINGAPORE"]
a.inject([]) { h, country
tmp_candidate = {}
candidates.each do |candidate|
if country == candidate['_id']
tmp_candidate = candidate
break
end
end
h << tmp_candidate
h
}
Run Code Online (Sandbox Code Playgroud)
a = ["JAPAN", "THAILAND", "KOREA", "TAIWAN", "AUSTRALIA", "MACAU", "SINGAPORE"]
[{"_id"=>"THAILAND", "cities"=>["BANGKOK", "CHIANGMAI"]},
{"_id"=>"MALAYSIA", "cities"=>["JAKARTA", "KUALA_LUMPUR"]},
{"_id"=>"JAPAN", "cities"=>["HOKKAIDO", "FUKUOKA", "TOKYO", "IBARAKI", "ISHIGAKI", "OSAKA", "KUMAMOTO", "KAGOSHIMA", "NAGOYA", "OKINAWA"]},
{"_id"=>"HONGKONG", "cities"=>["HONGKONG"]},
{"_id"=>"KOREA", "cities"=>["SEOUL", "BUSAN"]},
{"_id"=>"TAIWAN", "cities"=>["KAOHSIUNG", "TAIPEI"]},
{"_id"=>"AUSTRALIA", "cities"=>["MELBOURNE", "GOLD_COAST", "PERTH", "SYDNEY"]},
{"_id"=>"MACAU", "cities"=>["MACAU"]},
{"_id"=>"SINGAPORE", "cities"=>["SINGAPORE"]}]
.select{|h| a.index(h["_id"])}
.sort_by{|h| a.index(h["_id"])}
Run Code Online (Sandbox Code Playgroud)