【问题标题】:Create array of n items based on integer value根据整数值创建 n 个项目的数组
【发布时间】:2012-06-25 18:06:30
【问题描述】:

假设我有一个整数值,例如,10

如何创建一个包含 10 个元素的数组,例如 [1,2,3,4,5,6,7,8,9,10]

【问题讨论】:

标签: ruby


【解决方案1】:

关于方法复杂的cmets:

require 'benchmark'

Benchmark.bm { |x|
  x.report('[*..] ') do
    [*1000000 .. 9999999]
  end  

  x.report('(..).to_a') do
    (1000000 .. 9999999).to_a
  end

  x.report('Array(..)') do
    Array(1000000 .. 9999999)
  end

  x.report('Array.new(n, &:next)') do
    Array.new(8999999, &:next)
  end

}

小心,这个棘手的方法Array.new(n, &:next) 速度较慢,而其他三个基本方法相同。

                           user     system      total        real
[*..]                  0.734000   0.110000   0.844000 (  0.843753)
(..).to_a              0.703000   0.062000   0.765000 (  0.843752)
Array(..)              0.750000   0.016000   0.766000 (  0.859374)
Array.new(n, &:next)   1.250000   0.000000   1.250000 (  1.250002)

【讨论】:

    【解决方案2】:

    你可以这样做:

    array= Array(0..10)
    

    如果要输入,可以这样:

    puts "Input:"
    n=gets.to_i
    array= Array(0..n)
    puts array.inspect
    

    【讨论】:

      【解决方案3】:

      还有一个棘手的方法:

      > Array.new(10) {|i| i+1 }
      => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      

      【讨论】:

        【解决方案4】:

        你可以只喷一个范围:

        [*1..10]
        #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        

        Ruby 1.9 允许多个 splat,这非常方便:

        [*1..3, *?a..?c]
        #=> [1, 2, 3, "a", "b", "c"]
        

        【讨论】:

        • 这太好了,因为我之前没有意识到:[*0..0] #=> [0] 但是,[*1..0] #=> []跨度>
        • @MichaelKohl - 谢谢 - 问号是什么?在上面的字母表示之前?
        • 它们是字符文字。 ?c == 'c' #=> true
        • @MichaelKohl 看起来像是一种相当陌生的方法,我想我更喜欢使用单引号,就像在 [*1..3, *'a'..'z'] 中一样,但这对于打代码非常有用,我也不知道@ 987654325@(也许我错过了更多?),竖起大拇指:D
        • 我知道你是 7 年前写的,但这很酷。谢谢!
        【解决方案5】:
        def array_up_to(i)
            (1..i).to_a
        end
        

        这允许您:

         > array_up_to(10)
         => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-23
          • 2022-12-31
          • 2021-07-05
          • 1970-01-01
          • 2020-02-11
          相关资源
          最近更新 更多