ruby 一个接受任意数量参数的方法,如果参数是哈希的关键字,则返回新哈希,如果没有传递参数,则返回原始哈希

gj3fmq9x  于 2022-12-12  发布在  Ruby
关注(0)|答案(3)|浏览(129)

要求:

  • 描述hash_selector
  • 应接受散列和任意数量的附加参数
  • 应返回一个新的哈希值,其中包含作为附加参数传入的原始哈希值的键
  • 当没有传递其他参数时,返回原始哈希值

我目前的解决方案是:

def hash_selector(hash, *args)

    new_hash = {}
    args.each do |arg| 
        if hash.has_key?(arg)
           new_hash[arg] = hash[arg]
        end
    end

    new_hash
end

它返回new_hash,但我不知道如何编写它,所以当没有传递args时,它返回原始哈希。

rta7y2nd

rta7y2nd1#

我将添加以下内容作为方法的第一行:

return hash if args.empty?
a1o7rhls

a1o7rhls2#

我知道这可能是一个家庭作业练习,但它是一个非常复杂和非Rubyesque的方式做什么Hash#slice在一个单一的方法调用。

def hash_selector(hash, *args)
  args.any? ? hash.slice(*args) : hash
end

这是以下内容的缩写:

def hash_selector(hash, *args)
  if args.any? 
    hash.slice(*args)
  else
    hash
  end
end
koaltpgm

koaltpgm3#

在函数的开头添加下面一行。

return hash if args.empty?

相关问题