Ruby:基于指定顺序的哈希的concat字段?

时间:2013-12-27 18:05:13

标签: ruby-on-rails ruby

data = {"B"=>"bb", "C"=>"cc", "A"=>"aa", "D"=>"dd", "E"=>"", "F"=>nil}
fields_to_select = ["A", "B", "C"]
str = data.select { |elem| fields_to_select.include? elem }.values.compact.reject(&:empty?).join(', ')

这将返回bb, cc, aa,因为这是数据哈希中的顺序。

有没有办法根据fields_to_select中的顺序创建字符串?

这样它就会返回aa, bb, cc

2 个答案:

答案 0 :(得分:6)

是的......可以使用Hash#values_at

data = {"B"=>"bb", "C"=>"cc", "A"=>"aa", "D"=>"dd", "E"=>"", "F"=>nil}
fields_to_select = ["A", "B", "C"]
data.values_at(*fields_to_select).join(', ')
# => "aa, bb, cc"

答案 1 :(得分:0)

当然,values_at很酷,但这个问题也可以通过我们的老朋友map的花园多种用途来解决。

fields_to_select.map { |k| data[k] }.join(', ')