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

问题描述 投票:0回答:1

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

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

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

但是,当有多个排序标准时,我不知道如何动态生成我想传递给sort_by!的块。基本上,我想生成代码

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

因为我拥有尽可能多的参数,但是当我不知道在运行时之前有多少个参数时,我不知道如何做到这一点,而不是做一些疯狂的事情,比如构建一个字符串并调用eval

ruby sorting hash metaprogramming block
1个回答
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) }
© www.soinside.com 2019 - 2024. All rights reserved.