如何使用Ruby一步初始化数组?
我通过以下方式初始化数组:如何使用Ruby一步初始化数组?,ruby,arrays,initialization,Ruby,Arrays,Initialization,我通过以下方式初始化数组: array = Array.new array << '1' << '2' << '3' array=array.new 数组要创建这样的数组,可以执行以下操作: array = ['1', '2', '3'] 通过在[]中写入以下元素,可以一步初始化数组: array = ['1', '2', '3'] 如果您有一个字符串数组,也可以按如下方式初始化它: array = ['1', '2', '3'] array=%w{1
array = Array.new
array << '1' << '2' << '3'
array=array.new
数组要创建这样的数组,可以执行以下操作:
array = ['1', '2', '3']
通过在[]
中写入以下元素,可以一步初始化数组:
array = ['1', '2', '3']
如果您有一个字符串数组,也可以按如下方式初始化它:
array = ['1', '2', '3']
array=%w{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
对于以空格分隔的字符串数组,可以使用:
您还可以将块传递给数组。新建以确定每个条目的值:
array = Array.new(3) { |i| (i+1).to_s }
最后,虽然它不会产生与上面其他答案相同的三个字符串数组,但也请注意,您可以使用Ruby 1.8.7+中的枚举器来创建数组;例如:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
除了上面的答案,你也可以这样做
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
或
或
或
要证明有六种以上的方法可以做到这一点:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
如果1.method(:+)不可能,您也可以这样做
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
当然,在这种情况下这是过分的,但是如果plus_1
是一个非常长的表达式,那么您可能需要将它放在数组创建的另一行。您只需在ruby数组中使用%w
符号即可
array = %w(1 2 3)
它会将数组值1、2、3添加到数组中,并将输出打印为[“1”、“2”、“3”]
您可以执行的操作
array = ['1', '2', '3']
正如其他人所指出的,您还可以使用%w符号初始化数组,如下所示:
array = %w(1 2 3)
或
请注意,在这两种情况下,每个元素都是字符串,而不是整数。
因此,如果需要元素为整数的数组,则不应使用撇号将每个元素括起来:
array_of_integers = [1, 2, 3]
此外,您不需要在元素之间加逗号(这在创建没有此%w符号的数组时是必要的)。如果您这样做(我经常出错),如:
它的元素将是三个字符串--“1”,“2”,“3”。因此,如果你这样做:
puts wrong_array
输出将是:
1,
2,
3
=>nil
这不是我们想要的
希望这有助于澄清这一点 +1仅适用于新颖的单线重复推送。:)@Phrogz稍微短一点:array=array.new@AlexanderSuraphel,它创建一个Fixnums数组而不是字符串数组。@Phrogz我只想说它甚至可以更短。你只需要把1
改成'1'
。再加上一个详细的答案,尽管我更喜欢splat而不是([*'1'..'3']
)。@MichaelKohl我同意;我(错误地)认为你不能在1.8.6中显示范围。我再补充一句,谢谢!请注意,您不需要在数组文本中使用splat(除非您与splat一起进行合成)。我知道,只是我主要使用splat来实现这一目的(即合成),我也喜欢它显示您最终得到的结果。此外,类方法数组::[]可以使用:array[“1”、“2”、“3”]#=>[“1”、“2”、“3”]
(我不认为这个方法与数组文本构造函数有任何关系)。你也可以使用顶级内核数组(方法名看起来确实像类名)array(1..5)
[1,2,3,4,5]
这个*是做什么的?我可以在哪里找到相关文档?在1.9中,你也可以这样做:>[*?1..5]。=>[“1”、“2”、“3”、“4”、“5”]
。我没有投反对票,但我猜这是因为它调用了三个方法并递增地增长了数组,而不是执行单个初始化的[1,2,3]
。此外,您还有更多的字符。此外,您创建了一个Fixnums数组,而OP询问的是字符串数组。
array = %w(1 2 3)
array = %w[1 2 3]
array_of_integers = [1, 2, 3]
wrong_array = %w(1, 2, 3)
puts wrong_array
1,
2,
3
=>nil