我有一些数据要以['a1', 'b321', 'a33', 'c', ...]
的形式排序为数组。
我想将所有'aN'放入sorted_data[:a]
等。
下面的代码遍历数据,并在它们上正确运行正则表达式。
它没有做的是将它们放在正确的位置 - sorted_data[filter[:key]]
为空。
如何使用filter[:key]
作为sorted_data
的密钥?
感谢。
sorted_data = { a: Array.new,
b: Array.new,
c: -1 }
filters = [{ re: /^a\d+$/, key: 'a' },
{ re: /^b\d+$/, key: 'b' },
{ re: /^c$/, key: 'c' }]
['a1', 'b321', 'a33', 'c', 'b', 'b1'].each {|cell|
filters.each {|filter|
if cell.match(filter[:re])
puts "#{cell} should go in #{filter[:key]}" + '....[' + sorted_data[filter[:key]].to_s + ']....'
break
end
}
}
以上的输出是
# a1 should go in a....[]....
# b321 should go in b....[]....
# a33 should go in a....[]....
# c should go in c....[]....
# b1 should go in b....[]....
答案 0 :(得分:0)
我相信下面的程序会产生所需的输出:
l = ['a1', 'b321', 'a33', 'c', 'b', 'b1']
sorted_data = Hash.new { |hash, key| hash[key] = [] }
l.each do |item|
first_char = item[0].to_sym
sorted_data[first_char].push item
end
puts sorted_data
输出:
{:a=>["a1", "a33"], :b=>["b321", "b", "b1"], :c=>["c"]}