传递 sort_by 排序字段数组
Passing sort_by an array of sort fields
如果我有一个哈希数组
collection = [
{ first_name: 'john', last_name: 'smith', middle: 'c'},
{ first_name: 'john', last_name: 'foo', middle: 'a'}
]
以及我要排序的一组键:
sort_keys = ['first_name', 'last_name']
如果这些键始终与集合中的键匹配,我如何将这些键传递给 sort_by
?
我试过了
collection.sort_by { |v| sort_keys.map(&:v) }
但这不起作用。我相信我需要使用 proc,但我不确定如何实现它。非常感谢任何帮助!
使用 Ruby 2.2.1
如果您将 sort_keys
更改为包含符号:
sort_keys = [:first_name, :last_name]
您可以使用 values_at
检索值:
collection.sort_by { |h| h.values_at(*sort_keys) }
#=> [{:first_name=>"john", :last_name=>"foo", :middle=>"a"}, {:first_name=>"john", :last_name=>"smith", :middle=>"c"}]
用于对哈希进行排序的数组如下所示:
collection.map { |h| h.values_at(*sort_keys) }
#=> [["john", "smith"], ["john", "foo"]]
如果我有一个哈希数组
collection = [
{ first_name: 'john', last_name: 'smith', middle: 'c'},
{ first_name: 'john', last_name: 'foo', middle: 'a'}
]
以及我要排序的一组键:
sort_keys = ['first_name', 'last_name']
如果这些键始终与集合中的键匹配,我如何将这些键传递给 sort_by
?
我试过了
collection.sort_by { |v| sort_keys.map(&:v) }
但这不起作用。我相信我需要使用 proc,但我不确定如何实现它。非常感谢任何帮助!
使用 Ruby 2.2.1
如果您将 sort_keys
更改为包含符号:
sort_keys = [:first_name, :last_name]
您可以使用 values_at
检索值:
collection.sort_by { |h| h.values_at(*sort_keys) }
#=> [{:first_name=>"john", :last_name=>"foo", :middle=>"a"}, {:first_name=>"john", :last_name=>"smith", :middle=>"c"}]
用于对哈希进行排序的数组如下所示:
collection.map { |h| h.values_at(*sort_keys) }
#=> [["john", "smith"], ["john", "foo"]]