Ruby获取二维数组中的对角元素

Kan*_*ath 9 ruby multidimensional-array

我正在尝试使用2D ruby​​数组时遇到一些问题,当我进行数组切片时,我的LOC减少了很多.所以,例如,

require "test/unit"

class LibraryTest < Test::Unit::TestCase

  def test_box
    array = [[1,2,3,4],[3,4,5,6], [5,6,7,8], [2,3,4,5]]
    puts array[1][2..3] # 5, 6
    puts array[1..2][1] # 5, 6, 7, 8
  end
end
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法获得对角切片?让我们说我想从[0,0]开始并想要一个3的对角切片.然后我会得到[0,0],[1,1],[2,2]的元素,我会得到一个类似的数组[1,4,7]例如上面.是否有任何神奇的单行红宝石代码可以实现这一目标?3次做{某些神奇的东西?}

YOU*_*YOU 14

puts (0..2).collect { |i| array[i][i] }
Run Code Online (Sandbox Code Playgroud)

  • !解决办法太明显了!干得好,虽然我会使用 array.size 代替 2,因为数组长度可能不同。 (2认同)

zil*_*lla 6

更好的可能是利用Matrix库的单线程:

require 'matrix'
Matrix.rows(array).each(:diagonal).to_a
Run Code Online (Sandbox Code Playgroud)