我用这种方式初始化一个数组:
array = Array.new
array << '1' << '2' << '3'
可以一步完成吗?如果是这样,怎么样?
答案 0 :(得分:181)
您可以使用数组文字:
array = [ '1', '2', '3' ]
您还可以使用范围:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
对于以空格分隔的字符串数组,您可以使用Percent String syntax:
array = %w[ 1 2 3 ]
您还可以将一个块传递给Array.new
,以确定每个条目的值是什么:
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 :(得分:17)
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']
答案 2 :(得分:8)
除上述答案外,您也可以这样做
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
答案 3 :(得分:7)
证明有超过一个六种方法:
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
是一个很长的表达式,你可能想把它放在与数组创建不同的一行上。
答案 4 :(得分:3)
如果你有一个字符串数组,你也可以像这样初始化它:
array = %w{1 2 3}
将每个元素与任何空格分开
答案 5 :(得分:2)
要创建这样的数组,您可以这样做:
array = ['1', '2', '3']
答案 6 :(得分:2)
你可以做到
array = ['1', '2', '3']
正如其他人所说,您也可以使用%w表示法初始化数组:
array = %w(1 2 3)
或
array = %w[1 2 3]
请注意,在这两种情况下,每个元素都是一个字符串,而不是整数。 因此,如果你想要一个元素为整数的数组,你不应该用撇号包装每个元素:
array_of_integers = [1, 2, 3]
此外,您不需要在元素之间放置逗号(在创建没有此%w表示法的数组时这是必需的)。如果你这样做(我经常误做),如:
wrong_array = %w(1, 2, 3)
它的元素将是三个字符串----“1”,“2”,“3”。所以如果你这样做:
puts wrong_array
输出将是:
1,
2,
3
=>nil
这不是我们想要的。
希望这有助于澄清这一点!
答案 7 :(得分:1)
您可以通过在[]
中编写元素来一步初始化数组:
array = ['1', '2', '3']
答案 8 :(得分:0)
您可以在ruby数组中使用%w
表示法执行此操作。
array = %w(1 2 3)
它会将数组值1,2,3添加到数组中,并将输出打印为["1", "2", "3"]