【问题标题】:Accessing singular points in multidimensional arrays [closed]访问多维数组中的奇异点 [关闭]
【发布时间】:2016-03-21 10:16:09
【问题描述】:

下面的代码可以很好地获取常规数组中的所有其他项目。

letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]
letters.each.with_index do |i, index|
  if (index %2 ==0)  then
    puts "#{[index, i]}"
  end
end

但在多维中,我不知道如何从0 -> b1 -> d 等获取每个数组的第二项。有什么想法吗?

【问题讨论】:

  • 万一,letters.flatten.each.with_index是你想要的吗?
  • 请阅读“minimal reproducible example”。
  • 嘿锡人,谢谢.. 对我来说,这是编写代码的最简单方法。并不是每个人都是专家;)

标签: arrays ruby multidimensional-array


【解决方案1】:
letters.each do |letter|
  puts letter[1] # Will give you second item of sub array
end

如果要在子数组的偶数索引处获取项目,则还必须遍历子数组

letters.each do |letter|
  letter.each.with_index do |l, i|
    if (i %2 ==0)  then
      puts "#{[l, i]}"
    end
  end
end

【讨论】:

  • 谢谢,我使用您的第二个示例通过将 i %2 ==0 (第一项)的条件更改为 i %2 == 1 (第二项)来获取每个子数组的第二项.感谢您以这种方式写出,它有助于我理解这个概念。
【解决方案2】:

我们不要忘记数组的简单 :first 和 :last 属性。

irb(main):001:0> letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]
=> [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]
irb(main):002:0>  puts letters.map(&:last).to_s
["b", "d", "f", "h", "j"]

【讨论】:

    【解决方案3】:
    letters.each_index.zip(letters.transpose.last)
      #=> [[0, "b"], [1, "d"], [2, "f"], [3, "h"], [4, "j"]]
    

    【讨论】:

      【解决方案4】:

      您可以执行以下操作:

      letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]
      letters.each.with_index do |element, index|
          if (index %2 ==0)  then
              puts "#{[index, element[1]]}"
          end
      end
      
      => [0, "b"]
         [2, "f"]
         [4, "j"]
      

      当您迭代 letters 时,element 是一个数组。您可以按原样访问其字段。

      编辑:
      如果您真的想要所有元素,只需删除条件:

      letters = [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"], ["i", "j"]]
      letters.each.with_index do |element, index|
          puts "#{[index, element[1]]}"
      end
      
      => [0, "b"]
         [1, "d"]
         [2, "f"]
         [3, "h"]
         [4, "j"]
      

      【讨论】:

      • 请仔细阅读问题,您的解决方案不会打印 "d""h" 但要求是 如何从 0 -> b, 1 - 获取每个数组的第二项> d等
      • 好吧,我认为 OP 至少知道循环内的条件是什么。这个问题很可能是错误的。无论如何,我将编辑我的答案以涵盖对问题的两种解释。
      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多