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

时间:2011-02-05 17:36:54

标签: ruby arrays initialization

我用这种方式初始化一个数组:

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

可以一步完成吗?如果是这样,怎么样?

9 个答案:

答案 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"]