数値と範囲で配列を作成したい。このような:
range = [12, (1..11)]
次に、次のようになります。
[12, 1, 2, 3...11]
これを行う方法に関する提案はありますか?
短いバージョンは次のとおりです。
[12, *(1..11)] # => [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
これは、splat オペレーターと呼ばれます (ご存じない場合)。
したがって、これを行う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 つです。
[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]