学习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) 这些问题嵌入在评论和以下内容中:
链接列表实现:
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) 我想我已经陷入困境。由于性能原因,我正在尝试利用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)
所以也许这是科特林来的?还是还有另一种更好的方法?