【问题标题】:Ruby: Insert hash into array?Ruby:将哈希插入数组?
【发布时间】:2012-10-05 21:55:05
【问题描述】:

我正在尝试按照以下示例将哈希插入数组:How to make dynamic multi-dimensional array in ruby?。出了什么问题?

@array = Array.new
test1 = {"key1" => "value1"}
test2 = {"key2" => "value2"}
test3 = {"key3" => "value3"}            
@array.push(0)
@array[0] << test1
# ERROR: can't convert Hash into Integer    
@array[0] << test2    
@array.push(1)
@array[1] << test2
@array[1] << test3  

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    &lt;&lt; 追加到数组中,与push 相同,所以这样做:

    @array << test1
    

    或者,如果你想覆盖一个特定的元素,比如0

    @array[0] = test1
    

    或者你真的想要一个二维数组,比如@array[0][0]["key1"] == "value1"?在这种情况下,您需要在尝试追加空数组之前将它们插入到正确的位置:

    @array[0] = []
    @array[0] << test1
    @array[0] << test2    
    @array[1] = []
    @array[1] << test2
    @array[1] << test3 
    

    【讨论】:

    • 他说要多维数组
    • 谢谢,您为二维数组列出的代码有效
    • @Thomas,你是怎么做到的,答案后没有“已编辑”标记?
    • 好问题。我刚刚点击了“编辑”链接。不知道为什么它没有出现。也许是因为它是在我发布之后很快?也许是因为我是原始海报?也许是因为它还没有任何投票?
    • 你能把@array 保存到活动记录列吗?
    【解决方案2】:

    有很多方法可以插入到 Ruby 数组对象中。这里有一些方法。

    1.9.3p194 :006 > array = []
     => [] 
    1.9.3p194 :007 > array << "a"
     => ["a"] 
    1.9.3p194 :008 > array[1] = "b"
     => "b" 
    1.9.3p194 :009 > array.push("c")
     => ["a", "b", "c"] 
    1.9.3p194 :010 > array_2 = ["d"]
     => ["d"] 
    1.9.3p194 :011 > array = array + array_2
     => ["a", "b", "c", "d"] 
    1.9.3p194 :012 > array_3 = ["e"]
     => ["e"] 
    1.9.3p194 :013 > array.concat(array_3)
     => ["a", "b", "c", "d", "e"] 
    1.9.3p194 :014 > array.insert("f")
     => ["a", "b", "c", "d", "e"] 
    1.9.3p194 :015 > array.insert(-1,"f")
     => ["a", "b", "c", "d", "e", "f"] 
    

    【讨论】:

    • 谢谢,很高兴看到有不同的方法。我必须先运行array = [],然后再插入上面示例中的任何内容,否则它将返回undefined method &lt;&lt;' for nil:NilClass
    • 是的。 array = [] 与 array = Array.new 相同。通常在插入数组变量之前声明一个数组变量。
    【解决方案3】:

    @array[0] &lt;&lt; test1 在此上下文中表示0 &lt;&lt; { "key1" =&gt; "value1" },这是通过哈希对0 进行位移的尝试。 Ruby 无法将散列转换为整数来实现这一点,这就是您收到该错误消息的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多