如何使用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"]