我想制作一个包含数字和范围的数组。像这样:
range = [12, (1..11)]
那应该是什么样的:
[12, 1, 2, 3...11]
有关如何执行此操作的任何建议?
答案 0 :(得分:6)
这是一个较短的版本:
[12, *(1..11)] # => [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
它被称为splat运算符(如果你不知道)。
答案 1 :(得分:2)
所以这样做的一个方法就是这样说:
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的一个原因。
答案 2 :(得分:0)
[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]