小编Peh*_*eje的帖子

Nim枚举像Python这样的函数

学习Nim,我喜欢它类似于Python(但速度很快).在Python中我可以这样做:

item_index = [(idx, itm) for idx, itm in enumerate(row)]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种枚举 Nim序列的方法,所以我会这样写:

item_index = lc[(idx, itm) | (idx, itm <- enumerate(row))]
Run Code Online (Sandbox Code Playgroud)

这个功能是否存在?我敢肯定你可以创建它,也许有一个proc,模板或宏它但我仍然很新,这些似乎很难创造我自己.这是我的尝试:

iterator enumerate[T](s: seq[T]): (int, T) =
    var i = 0
    while i < len(s):
        yield (i, s[i])
        i += 1
Run Code Online (Sandbox Code Playgroud)

enumerate nim-lang

5
推荐指数
1
解决办法
511
查看次数

Swift通用构造函数

这些问题嵌入在评论和以下内容中:

  1. 如何在参数列表中定义通用T的默认值?
  2. 在Swift中复制参数时,它是指针还是对象?
    • XCode Beta 7告诉我,我无法改变"head",因为它是"let",请参阅代码
  3. 任何类似Swift的方式来循环检查nil以避免展开?

链接列表实现:

public class Node<T>
{
    public var data: T
    public var next: Node<T>?

    //1.
    //How can I define a default datatype for T?
    //In C++ I would let T ctor do it: "data: T = T()" gives 
    //error: 'T' cannot be constructed because it has no accessible initializers
    public init(data: T, next: Node<T>?)
    {
        self.data = data
        self.next = next
    }
}

func print<T>(head: Node<T>)
{
    var tmp = head  //2. Is …
Run Code Online (Sandbox Code Playgroud)

generics swift

3
推荐指数
1
解决办法
2064
查看次数

Kotlin和parallelStream toArray

我想我已经陷入困境。由于性能原因,我正在尝试利用Java parallelStream。

函数Specimen.pick()采样并返回Specimen的实例。我想在替换pool时使用parallelStream对此进行并行化。

var pool: Array<Specimen> = Array(100_000) .. 
Run Code Online (Sandbox Code Playgroud)

这就是我要在Kotlin中编写的内容:

pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.toArray(Specimen::new)
Run Code Online (Sandbox Code Playgroud)

:: new出现了哪些错误

相反,我不得不在列表和数组之间来回移动:

pool = pool.asList().parallelStream().map { Specimen.pick(pool, wheel, r.split()) }.collect(Collectors.toList()).toTypedArray()
Run Code Online (Sandbox Code Playgroud)

哪个可行,但似乎浪费资源,而不是直接进入Array。如果我让IntelliJ尝试Kotlinize这样的Java示例:

Java:

Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);
Run Code Online (Sandbox Code Playgroud)

IntelliJ转换:

val men = people.stream()
            .filter({ p -> p.getGender() === MALE })
            .toArray(Person[]::new  /* Currently unsupported in Kotlin */)
Run Code Online (Sandbox Code Playgroud)

所以也许这是科特林来的?还是还有另一种更好的方法?

kotlin java-stream

1
推荐指数
1
解决办法
904
查看次数

标签 统计

enumerate ×1

generics ×1

java-stream ×1

kotlin ×1

nim-lang ×1

swift ×1