如何使用Ruby一步初始化数组?

我这样初始化一个数组:

array = Array.new array << '1' << '2' << '3' 

一步到位可以做到吗? 如果是这样,怎么样?

正如其他人所指出的,你可以使用一个数组文字:

 array = [ '1', '2', '3' ] 

你也可以,例如,使用范围:

 array = ('1'..'3').to_a # parentheses are required # or array = *('1'..'3') # parentheses not required, but included for clarity 

对于许多以空格分隔的string的数组,最简单的是这种表示法:

 array = %w[ 1 2 3 ] 

一般来说,您可以将一个块传递给Array.new,并使用它来确定每个条目的值:

 array = Array.new(3){ |i| (i+1).to_s } 

最后,虽然它不会产生与上面其他答案相同的三个string的数组,但还要注意,您可以使用Ruby 1.8.7+中的枚举器来创build数组; 例如:

 array = 1.step(17,3).to_a #=> [1, 4, 7, 10, 13, 16] 

Oneliner:

 array = [] << 1 << 2 << 3 #this is for fixnums. 

要么

  a = %w| 1 2 3 4 5 | 

要么

  a = [*'1'..'3'] 

要么

  a = Array.new(3, '1') 

要么

  a = Array[*'1'..'3'] 

随着上面的答案,你也可以这样做

  => [*'1'.."5"] #remember * => ["1", "2", "3", "4", "5"] 

certificate有六种方法可以做到这一点:

 plus_1 = 1.method(:+) Array.new(3, &plus_1) # => [1, 2, 3] 

如果方法(:+)是不可能的,你也可以这样做

 plus_1 = Proc.new {|n| n + 1} Array.new(3, &plus_1) # => [1, 2, 3] 

当然,在这种情况下它是过度的,但是如果plus_1是一个非常长的expression式,你可能想把它放在与数组创build分开的一行上。

如果你有一个string数组,你也可以像这样初始化它:

array = %w{1 2 3}

只是用任何空白分隔每个元素

要创build这样一个数组,你可以这样做:

 array = ['1', '2', '3'] 

你可以做

 array = ['1', '2', '3'] 

正如其他人所指出的,你也可以用%w符号来初始化一个数组,如下所示:

 array = %w(1 2 3) 

要么

 array = %w[1 2 3] 

请注意,在这两种情况下,每个元素是一个string,而不是一个整数。 所以,如果你想要一个数组的元素是整数,你不应该用撇号包装每个元素:

 array_of_integers = [1, 2, 3] 

另外,您不需要在元素之间插入逗号(在创build没有%w表示法的数组时,这是必需的)。 如果你这样做(我经常犯错),如下所示:

 wrong_array = %w(1, 2, 3) 

它的元素将是三个string—-“1”,“2”,“3”。 所以如果你这样做:

 puts wrong_array 

输出将是:

 1, 2, 3 =>nil 

这不是我们想要的。

希望这有助于澄清这一点!

你可以通过像下面这样在[]写入元素来初始化一个数组:

 array = ['1', '2', '3'] 

你可以简单地用ruby数组中的%w符号来做到这一点。

 array = %w(1 2 3) 

它会将arrays值1,2,3添加到arrays,并将输出打印为["1", "2", "3"]