在运行时生成块以搜索多个参数

时间:2013-05-27 23:53:05

标签: ruby sorting hash metaprogramming block

我有一个由散列条目数组组成的数据库。

我想根据从命令行获取的参数对此数据库进行排序。如果只有一个选项,这很容易:

dbArray.sort_by! { |record| record[ARGV[0]] }

但是,当存在多个排序条件时,我不确定如何在此处动态生成我想传递给sort_by!的块。基本上,我想生成代码

dbArray.sort_by! { |record| [record[ARGV[0]], . . . ,  record[ARGV[N]]] }

我可以获得尽可能多的参数,但是当我不知道运行时有多少个参数时,我不知道如何做到这一点,而不是做一些疯狂的事情,比如构建一个字符串并调用{{1} }。

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) }