0

我有一个由哈希条目数组组成的数据库。

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

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

但是,当有多个排序条件时,我不确定如何动态生成要传递到sort_by!这里的块。基本上,我想生成代码

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

对于尽可能多的参数,但我不知道如何做到这一点,因为直到运行时我才知道有多少参数,没有做一些疯狂的事情,比如构建一个字符串并调用eval.

4

1 回答 1

0

听起来您正在寻找Hash#values_at

values_at(key, ...) → 数组

返回一个包含与给定键关联的值的数组。

所以给定一个像这样的哈希:

h = { :a => :b, :c => :d, :e => :f }

你可以这样做:

a = [ :a, :e ]
h.values_at(*a)
# [:b, :f]

在你的情况下,你会有这样的事情:

dbArray.sort_by! { |record| record.values_at(*ARGV) }
于 2013-05-28T00:14:13.497 回答