【问题标题】:Is there a repeat function in CoffeeScript similar to NumPy?CoffeeScript 中是否有类似于 NumPy 的重复功能?
【发布时间】:2014-08-24 22:45:00
【问题描述】:

在 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

【问题讨论】:

标签: javascript coffeescript


【解决方案1】:

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

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) 方法将其展平。

为了完整起见(参见 cmets),这是一个 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) 没有对象理解(不是与此示例相关)。

【讨论】:

  • 无赖。我希望会有类似repeat 函数的东西。不过,您的解决方案很好。我会用它来做一个函数。谢谢!
  • 如果你看一下 Bergi 的链接,这里有一个关于嵌套推导以及它们与 Python 的区别的完整讨论。 CS 的嵌套理解比我上面展示的更漂亮,但是它们的顺序与 Python 代码的工作方式不同,所以我没有演示 CS 的漂亮版本。 ;-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2023-04-07
    相关资源
    最近更新 更多