0

ハッシュ エントリの配列で構成されるデータベースがあります。

コマンドラインから取得したパラメータに基づいて、このデータベースをソートしたいと思います。オプションが 1 つしかない場合、これは簡単です。

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 に答える