【问题标题】:turn array columns into rows ruby [closed]将数组列变成行 ruby​​ [关闭]
【发布时间】:2017-05-30 04:13:57
【问题描述】:

我有一个名为拼图的数组,我正在尝试返回一个新数组,其中第一个数组包含

["a", "s", "i", "o", "s", "u", "z"] 

然后是由数组的第二个索引组成的下一个数组

["k", "o", "t", "t", "e", "r", "s"]

等等等等。有什么好的方法可以做到这一点。我正在考虑使用地图和两个计数器,但无法让它们在不同的时间正确操作或增加。任何帮助都是极好的。谢谢!

我想从这个puzzle返回一个新数组:

puzzle = [
  ["a", "k", "f", "o", "x", "e", "s"],
  ["s", "o", "a", "w", "a", "h", "p"],
  ["i", "t", "c", "k", "e", "t", "n"],
  ["o", "t", "s", "d", "h", "o", "h"],
  ["s", "e", "x", "g", "s", "t", "a"],
  ["u", "r", "p", "i", "w", "e", "u"],
  ["z", "s", "b", "n", "u", "i", "r"]
]

【问题讨论】:

  • 我注意到您从不接受针对您的问题给出的答案。确保花一些时间检查您的问题并接受最佳答案,因为它们可以解决您的问题。通过这种方式,您可以让社区知道问题已得到解决,同时您会奖励提供解决方案的人的努力
  • 由于puzzleArray 类的一个实例,您应该首先查看该类的实例方法(参见链接)。如果你没有找到有用的东西(但你应该),请查看模块EnumerableArray includes 那个模块,所以Enumerable 中的所有实例方法都可供Array 的实例使用,就像它们被创建为Array 实例方法一样。
  • 投反对票的原因是:1)根本没有付出任何努力; 2) 不接受正确答案。

标签: arrays ruby transform


【解决方案1】:
class Array
  def my_transpose!
    size.times do |i|
      0.upto(i) do |j|                                   # iterate only through lower half
        self[i][j], self[j][i] = self[j][i], self[i][j]  # swap rows and cols
      end
    end
    self                                                 # return the array itself
  end

  def my_transpose
    dup.map(&:dup).my_transpose!                         # inner arrays are dup'ed, too
  end
end

或者,如果你不需要一个 mutator....

.transpose 方法然后使用[] 选择您想要的数组

puzzle.transpose[0]

[0] 表示给我第一个结果。

puzzle.transpose[0]
=> ["a", "s", "i", "o", "s", "u", "z"]

puzzle.transpose[1]
=> ["k", "o", "t", "t", "e", "r", "s"]

【讨论】:

  • 您确实意识到,与我的相比,您的回答并没有带来什么新的东西,而且是在 10 分钟后给出的,对吧? :)
【解决方案2】:

Array#transpose 为您服务:

puzzle = [
  ["a", "k", "f", "o", "x", "e", "s"],
  ["s", "o", "a", "w", "a", "h", "p"],
  ["i", "t", "c", "k", "e", "t", "n"],
  ["o", "t", "s", "d", "h", "o", "h"],
  ["s", "e", "x", "g", "s", "t", "a"],
  ["u", "r", "p", "i", "w", "e", "u"],
  ["z", "s", "b", "n", "u", "i", "r"]
]
puzzle.transpose
# => [["a", "s", "i", "o", "s", "u", "z"],
#  ["k", "o", "t", "t", "e", "r", "s"],
#  ["f", "a", "c", "s", "x", "p", "b"],
#  ["o", "w", "k", "d", "g", "i", "n"],
#  ["x", "a", "e", "h", "s", "w", "u"],
#  ["e", "h", "t", "o", "t", "e", "i"],
#  ["s", "p", "n", "h", "a", "u", "r"]]

【讨论】:

  • transpose 是可行的方法,但puzzle.first.zip(*puzzle.drop(1)) 也可以。请参阅 Enumerable#zipEnumerable#drop。对于可以转置的数组,transposezip 方法是 ying 和 yang。
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2013-09-26
相关资源
最近更新 更多