我有两个数组,一个包含哈希,另一个包含整数。他们看起来像这样(样本):
mainArray[0] = {"ID" => 23, "NAME" => "SALLY"}
mainArray[1] = {"ID" => 34, "NAME" => "BILL"}
idArray[0] = 432
idArray[1] = 34
我想过滤mainArray
,以便只有ID值在idArray
中的条目才会被删除。我该怎么做才能做到最好?如果有帮助,我不介意制作新阵列。
答案 0 :(得分:2)
你可以这样做:
mainArray.find_all { |a| idArray.include?(a["ID"]) }
# => [{"ID"=>34, "NAME"=>"BILL"}]
答案 1 :(得分:1)
如果散列中的ID
值始终是唯一的,则可以执行此操作,这将非常快速地运行:
main_array = [
{"ID" => 23, "NAME" => "SALLY"},
{"ID" => 34, "NAME" => "BILL"}
]
id_array = [432, 34]
main_hash = main_array.map{ |h| [h['ID'], h['NAME']] }.to_h
main_hash.values_at(*id_array).compact # => ["BILL"]
我们的想法是将主数组转换为哈希,使用ID字段作为键,名称作为值。散列查找比使用数组更快 更快,尤其是当你必须查看每个数组时。
您的编码风格对于Ruby来说不是惯用语。我们使用snake_case for_variables_and_methods_because_it_is_easier toReadThanCamelCase。我们将CamelCase用于类和模块。我们使用UPPERCASE作为常量。遵循这些惯例,否则如果您进行专业编程,您将会感到非常悲伤。有关更多信息,请访问:
答案 2 :(得分:1)
h = mainArray.to_enum.with_object({}){|e, h| h[e["ID"]] = e["NAME"]}
idArray.map{|e| h[e]}.compact