【问题标题】:How to join second or third dimension array items without affecting first dimension如何在不影响第一维的情况下加入第二维或第三维数组项
【发布时间】:2014-04-03 08:50:09
【问题描述】:

我正在尝试创建一个数组来显示给定数字输入的每个数字排列。对于给定的输入"123",数组应如下所示:

["123", "132", "213", "231", "312", "321"]

我可以得到一个包含单独数字数组的数组:

a = []
"123".split('').each {|n| a.push(n) }
arraycombinations = a.permutation(a.length).to_a
# => [["1", "2", "3"], ["1", "3", "2"], ["2", "1", "3"], ["2", "3", "1"], ["3", "1", "2"], ["3", "2", "1"]]

但我不知道如何在保留第一个维度的同时加入arraycombinations 的第二个或第三个维度。

这些尝试都失败了:

arraycombinations.map {|x| print arraycombinations.join("") }
arraycombinations.map {|ar| ar.split(",") }
arraycombinations.each {|index| arraycombinations(index).join("") }

如何隔离join 函数以仅应用于多维数组中的第二维?

【问题讨论】:

    标签: ruby arrays join multidimensional-array permutation


    【解决方案1】:

    假设您已经有一个数组,例如

    a = [["1","2","3"],["1","3","2"],["2","1","3"],["2","3","1"], ["3","1","2"],["3","2","1"]]
    
    a.map { |i| i.join}
    #=>["123", "132", "213", "231", "312", "321"]
    

    【讨论】:

      【解决方案2】:

      真的很简单

      "123".split("").permutation.to_a.map { |x| x.join }
      

      让我解释一下:

      "123".split("") 给你一个数组 ["1","2","3"] permutation.to_a 给你数组数组 [["1","2","3"], ["2","1","3"] ... ] 那么您必须使用map { |x| x.join } 加入其中的每个数组 并得到所需的最终结果。

      【讨论】:

      • 甜蜜。但是 OP 已经有一个数组需要加入。
      • 哦,我错过了重点:) 但在我看来,最后一部分回答了这个问题。
      • 哇,你的解决方案和解决问题的方法比我的方向要优雅得多。只是出于好奇,指定连接 3 维或更高维数组的步骤是什么?我知道 .flatten 会影响维度,但了解如何根据维度来定位操作是我迷失的地方。
      • 我想到的丑陋的解决方案是嵌套地图和连接......所以你会写 array.map { |x| x.map { |y| y.join } } 但也许有更漂亮的解决方案...
      【解决方案3】:

      像这样:

      arraycombinations.map(&:join)
      # => ["123", "132", "213", "231", "312", "321"]
      

      【讨论】:

      • 喜欢 &:join 的用法 - 没想到 :)
      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 2023-01-11
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多