繁体   English   中英

通过与数组比较选择哈希元素

[英]Selecting hash elements by comparing with array

我正在寻找使用Ruby / Rails的方法来处理经典的“基于与另一个集合的匹配从集合中选择项目”的任务。

集一是一个简单的哈希,如下所示:

  fruits = {:apples => "red", :oranges => "orange", :mangoes => "yellow", :limes => "green"}

集二是一个数组,像这样:

   breakfast_fruits = [:apples, :oranges]

理想的结果是包含Breakfast_fruits中列出的水果的哈希:

    menu = {:apples => "red", :oranges => "orange"}

我有一个基本的嵌套循环,但是停留在基本比较语法上:

   menu = {}

   breakfast_fruits.each do |brekky|
      fruits.each do |fruit|
         //if fruit has the same key as brekky put it in menu
      end
   end

我也想知道在Ruby中是否有比嵌套迭代器更好的方法。

您可以使用Hash#keep_if

fruits.keep_if { |key| breakfast_fruits.include? key }
# => {:apples=>"red", :oranges=>"orange"}

这将修改fruits本身。 如果您不希望这样做,可以对代码进行一些修改:

menu = {}
breakfast_fruits.each do |brekky|
    menu[brekky] = fruits[brekky] if breakfast_fruits.include? brekky
end

ActiveSupport(Rails附带)添加了Hash#slice

切片(*键)

切片哈希以仅包含给定的键。 返回包含给定键的哈希值。

因此,您可以说以下内容:

h = { :a => 'a', :b => 'b', :c => 'c' }.slice(:a, :c, :d)
# { :a => 'a', :c => 'c' }

在您的情况下,您将使用splat数组:

menu = fruits.slice(*breakfast_fruits)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM