【问题标题】:Create an Array of Fixed Length Given an Array of Arbitrary Length给定一个任意长度的数组,创建一个固定长度的数组
【发布时间】:2010-02-02 20:16:47
【问题描述】:

我正在寻找一种方法,通过在顺序。

所以例如给定数组a:

a = [1, 2, 3, 4]

我想回来:

a = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

另一个例子:

b = ["peach", "plumb", "pear", "apple", "banana", "orange"]

会返回:

b = ["peach", "plumb", "pear", "apple", "banana", "orange", "peach", "plumb", "pear", "apple", "banana", "orange"]

等等。如果给定一个包含 12 个对象的数组,它只会返回相同的数组。

到目前为止,我为实现这一目标而编写的方法非常难看,而且不是很 Rubyish;对其他人如何处理这个问题感兴趣。

提前致谢。

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:

    在 1.8.7 和 1.9 中,您可以使用 Enumerators 做一些很酷的事情

    a = [1,2,3,4]
    #=> [1,2,3,4]
    a.cycle.take 12
    #=> [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
    

    【讨论】:

    • 不知道——非常好。
    • 非常好。对于 Ruby 1.8.6,只需 require 'backports'
    • 哇,永远不会知道这一点。完美。
    【解决方案2】:
    Array.new(12).fill(some_array).flatten[0..11]
    

    【讨论】:

      【解决方案3】:
      def twelvify array
        array += array while array.size < 12
        array[0..11]
      end
      

      它也有点难看,但至少它很简单。 :-)

      【讨论】:

      • 太棒了,谢谢!这绝对是我想出的更简洁的版本。
      • 我喜欢这个方法被称为:twelvify :)
      • chuckle 是的,我肯定有一个很好的 Rubyish 名字,但我不得不承认我比我更喜欢 BarqueBobcat 的回答! :)
      【解决方案4】:
      array * (12/array.size) + array[0, (12 % array.size)]
      

      【讨论】:

      • 正是 OP 所要求的,但亲爱的 $deity 它很丑 :)
      • 怎么样:array * (12/array.size + 1))[0,12]
      • @sepp2k,你的意思是......而不是......?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多