我有一个由散列条目数组组成的数据库。
我想根据从命令行获取的参数对此数据库进行排序。如果只有一个选项,这很容易:
dbArray.sort_by! { |record| record[ARGV[0]] }
但是,当存在多个排序条件时,我不确定如何在此处动态生成我想传递给sort_by!
的块。基本上,我想生成代码
dbArray.sort_by! { |record| [record[ARGV[0]], . . . , record[ARGV[N]]] }
我可以获得尽可能多的参数,但是当我不知道运行时有多少个参数时,我不知道如何做到这一点,而不是做一些疯狂的事情,比如构建一个字符串并调用{{1} }。
答案 0 :(得分:0)
听起来像是在寻找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) }