我有一个由一组哈希条目组成的数据库。
我想根据从命令行获取的参数对此数据库进行排序。如果只有一个选项,这很容易:
dbArray.sort_by! { |record| record[ARGV[0]] }
但是,当有多个排序标准时,我不知道如何动态生成我想传递给sort_by!
的块。基本上,我想生成代码
dbArray.sort_by! { |record| [record[ARGV[0]], . . . , record[ARGV[N]]] }
因为我拥有尽可能多的参数,但是当我不知道在运行时之前有多少个参数时,我不知道如何做到这一点,而不是做一些疯狂的事情,比如构建一个字符串并调用eval
。
听起来像你在寻找Hash#values_at
:
values_at(key,...)→array
返回一个包含与给定键关联的值的数组。
所以给出这样的哈希:
h = { :a => :b, :c => :d, :e => :f }
你可以这样做:
a = [ :a, :e ]
h.values_at(*a)
# [:b, :f]
在你的情况下,你会有这样的事情:
dbArray.sort_by! { |record| record.values_at(*ARGV) }