【问题标题】:Generating Blocks at Runtime to Search Multiple Parameters在运行时生成块以搜索多个参数
【发布时间】:2013-05-27 23:53:05
【问题描述】:

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

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

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】:

    听起来你在找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) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多