【问题标题】:How to get specific value within an array of arrays如何在数组数组中获取特定值
【发布时间】:2013-03-17 09:22:35
【问题描述】:

我有一个数组(外部数组),其中包含三个数组(内部数组),每个数组都有三个元素。

array = [[a, b, c], [d, e, f], [g, h, i]]

我想使用外部数组的索引来选择特定的内部数组,然后根据其索引在选定的内部数组中选择值。这是我尝试过的:

array.each_index{|i| puts "letter: #{array[i[3]]} " } 

我希望这会给我以下输出

letter: c letter: f letter: i

但是,我得到了

letter: [[a, b, c], [d, e, f], [g, h, i]]

我也试过

array.each_index{|i| puts "letter: #{array[i][3]} " } 

但我得到了相同的结果。请任何建议都非常感谢。我需要一个简单的解释。

【问题讨论】:

    标签: ruby arrays multidimensional-array indexing


    【解决方案1】:

    你可以像这样使用map

    a = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
    a.map(&:last)
    # => ["c", "f", "i"]
    

    或者,如果您真的想要 put 而不是收集的值:

    a.each {|v| puts "letter: #{v.last}"}
    

    如果你想做更多的 Matrix-y 事情,你也可以使用 Ruby 的 Matrix 类:

    require 'matrix'
    m = Matrix[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
    last_column = m.column_vectors.last
    # => Vector["c", "f", "i"]
    

    您现在可以在last_column 上使用任何Vector 方法,包括to_a,这将使您回到熟悉的领域并使用最后一列的值。

    【讨论】:

      【解决方案2】:

      each_index 是一个遍历所有索引并对每个索引执行操作的 Enumerable。完成后,它将返回您的原始收藏,因为更改它不是它的工作。如果您想通过puts / print 在屏幕上输出内容,那么each_index 就可以了。

      如果您想通过遍历原始集合的所有元素来创建新集合,则应使用map

      例如

      array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
      new_array = array.map {|el| el[2]}
      => ["c", "f", "i"]
      

      array.map 遍历数组的元素,所以在每一步 |el|是一个元素,而不是索引,例如:['a', 'b', 'c'] 在第一次迭代中,['d', 'e', 'f'] 在第二次迭代中,依此类推...

      只是指出这一点,因为我不知道您尝试做的目标是什么。

      【讨论】:

        【解决方案3】:

        您也可以尝试以下方法:

        p RUBY_VERSION
        
        arr = [[1,2,3],[4,5,6],[11,12,13]]
        
        arr.each{|x| p x; x.each_index{|i| p "Digit :: #{x[i]}" if i == 2} }
        

        输出:

        "2.0.0"
        [1, 2, 3]
        "Digit :: 3"
        [4, 5, 6]
        "Digit :: 6"
        [11, 12, 13]
        "Digit :: 13
        

        【讨论】:

        • 啊,这正是我想要的,我不知道为什么,但我没想到嵌套循环。不过有道理,你有一个嵌套数组,所以为什么不嵌套循环......好东西。虽然我也喜欢其他建议,因为在某些时候我需要修改数组而不仅仅是打印它。但这回答了我最初的问题。谢谢!!
        【解决方案4】:

        ruby 中的数组从 0 开始索引,而不是从 1 开始。所以:

        array.each_index{|i| puts "letter: #{array[i][2]} " }
        

        应该给你你想要的。

        【讨论】:

        • 这又是我的一个错字,我的实际代码的索引为 0-51,所以我在写出我的问题时有点仓促。你写的东西是我最初认为会起作用的,我的意思是它是有道理的,但由于某种原因它只是不起作用。
        【解决方案5】:

        这样做:

        array.each_index{|i| puts "letter: #{array[i][2]} " } 
        

        因为您想要索引 2 处的字母,而不是 3。

        数组也应该这样定义:

        array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
        

        【讨论】:

        • 我实际上是想把 2 而不是 3 放在我的拼写错误...我正在处理的实际代码在主数组中有 52 个数组(它是一副纸牌,所以索引 0- 51)。我急于尝试为这篇文章简化它。
        猜你喜欢
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多