我想用数字和范围制作一个数组。像这样:
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 运算符(以防你不知道)。
所以一个*的方法是这样说:
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 的原因之一。
[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]