在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
答案 0 :(得分: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)没有对象理解(不是与这个例子有关)。
答案 1 :(得分:2)
CoffeeScript与语言本身有关。您正在寻找的是图书馆支持。没有像NumPy那样全面的东西,它仍然没有repeat()
函数,但你至少可以在Underscore.js中找到几个(有些)相关的函数。 Lemonad对于某些相关任务看起来也很有希望。