Ruby使用数字和范围制作数组

时间:2013-08-01 17:39:29

标签: ruby arrays range

我想制作一个包含数字和范围的数组。像这样:

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

那应该是什么样的:

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

有关如何执行此操作的任何建议?

3 个答案:

答案 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]