为什么删除元素时nim中不保留序列的顺序?

问题描述 投票:0回答:1

我正在尝试 nim,并在处理序列时与奇怪的行为作斗争。

如果我运行这段代码:

var
    hobbies = @["Coding", "Creating", "Sports"]

echo hobbies

hobbies.add("Nature")
echo hobbies

hobbies.del(0)
echo hobbies

我期望这个输出,因为我认为它像队列一样工作:

@["Coding", "Creating", "Sports"]
@["Coding", "Creating", "Sports", "Nature"]
@["Creating", "Sports", "Nature"]

但我明白了:

@["Coding", "Creating", "Sports"]
@["Coding", "Creating", "Sports", "Nature"]
@["Nature", "Creating", "Sports"]

通过索引删除后

.del(0)
"Nature"
切换到索引0。

订单不应该保留吗?

版本:

Nim Compiler Version 1.6.14 [Linux: amd64]
Compiled at 2023-06-29
sequence nim-lang
1个回答
0
投票

del
操作将最后一个项目与被删除的项目交换,然后弹出最后一个项目。具有恒定的复杂性。

如果你想保留元素的顺序,那么你需要使用

delete
操作,它将在项目被删除后将每个项目的索引移动1。此操作的线性复杂度与序列的大小成正比。

© www.soinside.com 2019 - 2024. All rights reserved.