Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何根据另一个数组对哈希数组进行过滤和排序?_Arrays_Ruby_Hash - Fatal编程技术网

Arrays 如何根据另一个数组对哈希数组进行过滤和排序?

Arrays 如何根据另一个数组对哈希数组进行过滤和排序?,arrays,ruby,hash,Arrays,Ruby,Hash,我想对哈希数组进行筛选和排序: [ {"_id"=>"THAILAND", "cities"=>["BANGKOK", "CHIANGMAI"]}, {"_id"=>"MALAYSIA", "cities"=>["JAKARTA", "KUALA_LUMPUR"]}, {"_id"=>"JAPAN", "cities"=>["HOKKAIDO", "FUKUOKA", "TOKYO", "IBARAKI", "ISHIGAKI", "OSAKA",

我想对哈希数组进行筛选和排序:

[
  {"_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"]}
]
根据阵列:

["JAPAN", "THAILAND", "KOREA", "TAIWAN", "AUSTRALIA", "MACAU", "SINGAPORE"]
预期结果是:

[
  {"_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"]}
]
我怎么能优雅地做到这一点

这就是我计划实施它的方式

我觉得我的想法看起来很混乱,不容易理解
候选者=[
{u id=>“泰国”、“城市”=>[“曼谷”、“清迈”]},
{u id=>“马来西亚”、“城市”=>[“雅加达”、“吉隆坡”],
{“_id”=>“日本”、“城市”=>[“北海道”、“福冈”、“东京”、“茨城”、“石垣”、“大阪”、“熊本”、“鹿儿岛”、“名古屋”、“冲绳”],
{“{u id”=>“香港”,“城市”=>[“香港”]},
{u id=>“韩国”、“城市”=>[“首尔”、“釜山”]},
{u id=>“台湾”、“城市”=>[“高雄”、“台北”]},
{“\u id”=>“澳大利亚”、“城市”=>[“墨尔本”、“黄金海岸”、“珀斯”、“悉尼”],
{“{u id”=>“澳门”,“城市”=>[“澳门”]},
{“新加坡”、“城市”=>[“新加坡”]}
]
a=[“日本”、“泰国”、“韩国”、“台湾”、“澳大利亚”、“澳门”、“新加坡”]
a、 注入([]){h,国家/地区
tmp_候选人={}
候选人。每个人都是候选人|
如果国家==候选人[''身份证']
tmp_候选者=候选者
打破
结束
结束

h如果您的第一个数组是
arr
,第二个数组是
国家

arr.each_with_object({}) { |g,h|  h.update(g["_id"]=>g) }.
    values_at(*countries).
    compact
  #=> [{"_id"=>"JAPAN",     "cities"=>[...]},
  #    {"_id"=>"THAILAND",  "cities"=>[...]},
  #    {"_id"=>"KOREA",     "cities"=>[...]},
  #    {"_id"=>"TAIWAN",    "cities"=>[...]},
  #    {"_id"=>"AUSTRALIA", "cities"=>[...]},
  #    {"_id"=>"MACAU",     "cities"=>[...]},
  #    {"_id"=>"SINGAPORE", "cities"=>[...]}]

只有当
国家/地区的一个或多个元素在
arr
中可能没有相应的哈希时,才需要
.compact

欢迎使用Stack Overflow。因此,“给我代码”不是一个网站,而是一个我们帮助修复您编写的代码的网站。我们希望看到您的工作示例。请阅读“以及该页面底部的链接。今后,请将您的示例缩减到最能说明问题的程度。例如,在这里,每个国家有三个国家,最多两个城市就足够了。为每个示例的输入分配一个变量也很有帮助(例如,
arr=[{{u id=>…},…]
国家=[“日本”,…]
)。这样,读者就可以在答案和评论中引用这些变量,而无需定义它们。
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"])}
arr.each_with_object({}) { |g,h|  h.update(g["_id"]=>g) }.
    values_at(*countries).
    compact
  #=> [{"_id"=>"JAPAN",     "cities"=>[...]},
  #    {"_id"=>"THAILAND",  "cities"=>[...]},
  #    {"_id"=>"KOREA",     "cities"=>[...]},
  #    {"_id"=>"TAIWAN",    "cities"=>[...]},
  #    {"_id"=>"AUSTRALIA", "cities"=>[...]},
  #    {"_id"=>"MACAU",     "cities"=>[...]},
  #    {"_id"=>"SINGAPORE", "cities"=>[...]}]