我有一个像这样的数组
example_array = ['dog', 'cat', 'snake']
我试图将时间戳附加到数组的每个元素,输出应该看起来像
example_array = [{'dog': 'time_stamp'},{'cat':'time_stamp'},{'snake':'time_stamp'}]
我试过这个,但输出不正确:
a = {}
example_array.each_with_index do |element, i|
a.merge!("#{element}": "#{Time.now}")
example_array.delete_at(i)
end
有人能建议我使用红宝石的解决方案吗? 我尝试了很多方法,但无法获得上述输出。
答案 0 :(得分:1)
Aditha,
这个怎么样?
array = ["cat", "hat", "bat", "mat"]
hash = []
hash.push(Hash[array.collect { |item| [item, Time.now] } ])
OUTPUT:=> [{" cat" =>" 2018-02-28 04:23:08 UTC"," hat" =>" 2018-02 -28 04:23:08 UTC"," bat" =>" 2018-02-28 04:23:08 UTC"," mat" =>" 2018-02-28 04:23:08 UTC"}]
您可以插入时间戳信息,而不是item.upcase。它给了我数组中的哈希值。
答案 1 :(得分:1)
example_array.product([Time.now]).map { |k,v| { k.to_sym=>v }}
#=> [{:dog=>2018-02-27 20:42:56 -0800},
# {:cat=>2018-02-27 20:42:56 -0800},
# {:snake=>2018-02-27 20:42:56 -0800}
]注意这可以确保所有值(时间戳)相等。
答案 2 :(得分:0)
唯一奇怪的是你必须使用=>而不是:
arr = ['dog', 'cat', 'snake']
arr2 = []
for index in 0 ... arr.size
arr2.push({arr[index] => Time.now})
end
puts arr2
答案 3 :(得分:0)
['dog', 'cat', 'snake'].map{|e| [{e.to_sym => "time_stamp"}]}
# => [[{:dog=>"time_stamp"}], [{:cat=>"time_stamp"}], [{:snake=>"time_stamp"}]]