0

在 NumPy 中,您可以轻松创建重复值的数组。像下面这样。

>> print np.arange(3).repeat(2)
[0 0 1 1 2 2]

有没有办法在 CoffeeScript 中做到这一点?

更新:按照 Marius 在他的回答中提出的建议,我创建了一个简单的函数来自动执行重复操作。这适用于将来遇到相同问题的任何人。

repeat = (arr, repeats) ->
    newArr = for a in arr
        a for [0...repeats]
    return [].concat.apply [], newArr
4

2 回答 2

3

不是直接的。这很丑陋,但有效:

arr = for a in [0..2]
  a for [0..1]

console.log arr
console.log [].concat.apply [], arr

输出:

[ [ 0, 0 ], [ 1, 1 ], [ 2, 2 ] ]
[ 0, 0, 1, 1, 2, 2 ]

第一个块创建嵌套数组,concat.apply (javascript) 方法将其展平。

为了完整起见(见评论),这是一个 CS“漂亮”版本,但请注意它创建了另一种数组(它以不同的顺序执行循环):

arr = (a for a in [0..2] for [0..1])

console.log arr
console.log [].concat.apply [], arr

输出:

[ [ 0, 1, 2 ], [ 0, 1, 2 ] ]
[ 0, 1, 2, 0, 1, 2 ]

最后一个示例不能与您的代码直接比较,但无论如何都可能可用,具体取决于您真正想要完成的任务。

关于 CS 有很多值得喜爱的地方,但我讨厌的两件事是 1) 总是必须为块使用空格(无法使我的第一个示例成为单线),以及 2) 没有对象理解(与此无关例子)。

于 2013-02-27T09:51:35.457 回答
2

CoffeeScript 是关于语言本身的。您正在寻找的是图书馆支持。没有任何东西像 NumPy 那样全面,它仍然没有一个repeat()函数,但你至少可以在 Underscore.js 中找到几个(有点)相关的函数Lemonad对于一些相关任务看起来也很有希望。

于 2013-02-27T13:13:58.760 回答