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

所以一个*的方法是这样说:

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 的原因之一。

于 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 回答