在ruby中创建哈希数组

Chi*_*ani 6 ruby arrays hashmap

我想在ruby中创建一个哈希数组:

 arr[0]
     "name": abc
     "mobile_num" :9898989898
     "email" :abc@xyz.com

 arr[1]
     "name": xyz
     "mobile_num" :9698989898
     "email" :abcd@xyz.com
Run Code Online (Sandbox Code Playgroud)

我见过哈希数组文档.在我发现的所有内容中,我必须做类似的事情

c = {}
c["name"] = "abc"
c["mobile_num"] = 9898989898
c["email"] = "abc@xyz.com"

arr << c
Run Code Online (Sandbox Code Playgroud)

循环中的上述语句中的迭代允许我填充arr.我实际上像一行一样排空["abc",9898989898,"abc@xyz.com"].有没有更好的方法来做到这一点?

ael*_*lor 12

你可以先将数组定义为

array = []
Run Code Online (Sandbox Code Playgroud)

然后你可以按照下面的方法逐个定义哈希值并将它们推入数组中.

hash1 = {:name => "mark" ,:age => 25}
Run Code Online (Sandbox Code Playgroud)

然后呢

array.push(hash1)
Run Code Online (Sandbox Code Playgroud)

这会将哈希插入数组中.类似地,您可以推送更多哈希来创建哈希数组.


小智 11

假设你所说的"rowofrows"是一个数组数组,那么我认为你要完成的是一个解决方案:

array_of_arrays = [["abc",9898989898,"abc@xyz.com"], ["def",9898989898,"def@xyz.com"]]

array_of_hashes = []
array_of_arrays.each { |record| array_of_hashes << {'name' => record[0], 'number' => record[1].to_i, 'email' => record[2]} }

p array_of_hashes
Run Code Online (Sandbox Code Playgroud)

将输出您的哈希数组:

[{"name"=>"abc", "number"=>9898989898, "email"=>"abc@xyz.com"}, {"name"=>"def", "number"=>9898989898, "email"=>"def@xyz.com"}]
Run Code Online (Sandbox Code Playgroud)

  • 甚至更短,`array_of_hashes = array_of_arrays.collect {| each | Hash [%w {name number email} .zip(each)]}` (7认同)