在Ruby中创建哈希数组

7
我想在Ruby中创建一个哈希数组,如下所示:
 arr[0]
     "name": abc
     "mobile_num" :9898989898
     "email" :abc@xyz.com

 arr[1]
     "name": xyz
     "mobile_num" :9698989898
     "email" :abcd@xyz.com

我已经看过哈希数组文档。在所有我发现的文档中,我需要做类似以下的操作


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

arr << c

在循环中像上面的语句一样迭代,允许我填充arr。实际上,我使用一个类似于["abc",9898989898,"abc@xyz.com"]的一行来表示行的行。有更好的方法吗?

1
你能澄清一下你问题中的这一部分吗:“我实际上是用一个类似于['abc',9898989898,'abc@xyz.com']的行来进行rowofrows操作。” - mikej
3个回答

15
假设你所说的“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

输出哈希数组:

[{"name"=>"abc", "number"=>9898989898, "email"=>"abc@xyz.com"}, {"name"=>"def", "number"=>9898989898, "email"=>"def@xyz.com"}]

7
更简洁的写法是 array_of_hashes = array_of_arrays.map{|each| Hash[%w{name number email}.zip(each)]}。该代码将一个由数组组成的数组转换为一个由哈希表组成的数组,每个哈希表包含相同键(name、number和email)但值不同的条目。 - akuhn
不错,akuhn。我喜欢这个。 - jboursiquot

13

您可以先将数组定义为

array = []

然后你可以逐个定义哈希值,并按以下方式将它们推入数组中。

hash1 = {:name => "mark" ,:age => 25}

然后执行

array.push(hash1)

这将把散列插入到数组中。同样,您可以推送更多的散列以创建一组散列。


3

你也可以直接在push方法中这样做:

  1. 首先定义你的数组:

    @shopping_list_items = []

  2. 然后向列表中添加新项目:

    @shopping_list_items.push(description: "苹果", amount: 3)

  3. 这将会得到类似如下的结果:

    => [{:description=>"苹果", :amount=>3}]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接