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
答案 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(', ')