修改数组

时间:2018-02-28 04:03:35

标签: ruby

我有一个像这样的数组

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

有人能建议我使用红宝石的解决方案吗? 我尝试了很多方法,但无法获得上述输出。

4 个答案:

答案 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"}]]