2

数値と範囲で配列を作成したい。このような:

range = [12, (1..11)]

次に、次のようになります。

[12, 1, 2, 3...11]

これを行う方法に関する提案はありますか?

4

3 に答える 3

7

短いバージョンは次のとおりです。

[12, *(1..11)] # => [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

これは、splat オペレーターと呼ばれます (ご存じない場合)。

于 2013-08-01T17:41:47.943 に答える
3

したがって、これを行う1つの*方法は、次のように言うことです:

range = [12, (1..11).to_a].flatten

説明

ここでの問題は(1..11)、配列ではないことです。範囲ですが、配列だと思いました。したがって、最初に配列に変換する必要があります。

(1..11).to_a

さて、問題は多次元配列があることです。右?

[12, (1..11).to_a] # => [12, [1, 2, 3...11]] 

これを単一の配列に変換するには、次のようにする必要がflattenあります。

[12, (1..11).to_a].flatten # => [12, 1, 2, 3...11]

出来上がり!

他の方の回答を見てみたいです。

*これが私が Ruby を大好きな理由の 1 つです。

于 2013-08-01T17:39:28.720 に答える
2
[12, (1..11)].flat_map{|i| i.is_a?(Range) ? i.to_a : i}
# => [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
于 2013-08-01T17:46:01.567 に答える