web-dev-qa-db-ja.com

Rubyを使用してワンステップで配列を初期化する方法は?

この方法で配列を初期化します。

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

1ステップでそれを行うことは可能ですか?もしそうなら、どのように?

97
user502052

配列リテラルを使用できます:

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

範囲を使用することもできます:

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

空白で区切られた文字列の配列の場合、 パーセント文字列構文 を使用できます。

array = %w[ 1 2 3 ]

ブロックをArray.newに渡して、各エントリの値を決定することもできます。

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

最後に、上記の他の回答と同じ3つの文字列の配列は生成されませんが、Ruby 1.8.7+の列挙子を使用して配列を作成できることにも注意してください。例えば:

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

一発ギャグ:

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']
17
pankajdoharey

上記の答えに加えて、あなたもこれを行うことができます

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

証明する以上のものがある 1 6つの方法:

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が非常に長い式である場合は、配列の作成とは別の行に配置することをお勧めします。

7
Andrew Grimm

文字列の配列がある場合は、次のように初期化することもできます。

array = %w{1 2 3}

各要素を空白で区切るだけです

3
John Douthat

できるよ

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)

その要素は3つの文字列---- "1"、 "2"、 "3"になります。あなたがそうするなら:

puts wrong_array

出力は次のようになります。

1,
2,
3
=>nil

ここでは望んでいないものです。

これがポイントの明確化に役立つことを願っています!

2
tg_freelancer

このような配列を作成するには、次のようにします。

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

次のように[]の要素を記述することにより、1ステップで配列を初期化できます。

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

Ruby配列の%w表記でこれを行うことができます。

array = %w(1 2 3)

配列に配列値1,2,3を追加し、出力を["1", "2", "3"]として出力します

0
Prabhakar