Julia中是否存在可一次性从向量弹出多个元素的内置函数?
Julia目前最新稳定版(1.10.x)并未推出和push!多参数逻辑对应的pop!(collection, n)内置函数,不过你可以直接使用内置的splice!函数实现所有批量弹出需求,无需自定义工具函数:
- 弹出向量前n个元素,和你给出的
popMany!逻辑完全一致:
直接调用splice!(vector, 1:n)即可,函数会原地删除向量前n个元素,同时返回被删除的元素数组。 - 弹出任意指定范围的元素:
直接传入目标范围作为第二个参数即可,比如弹出索引5到10的元素可以写splice!(vector, 5:10)。 - 弹出任意不连续索引对应的元素:
传入升序排列的索引数组即可,比如要弹出索引2、4、7的元素可以写splice!(vector, [2,4,7])。如果你的索引是乱序的,先调用sort!处理索引数组再传入,避免删除前序元素后导致后续索引偏移出错。
关于你尝试的popat!广播写法报错的问题:你错误地将待修改的向量也放入了广播维度,正确写法如果要使用popat!批量删除,需要倒序处理索引避免偏移,示例如下:
# 弹出前3个元素,用popat!实现 res = [popat!(vector, i) for i in reverse(1:3)] |> reverse
这种写法性能不如直接调用splice!,更推荐优先使用splice!实现批量弹出需求。
内容的提问来源于stack exchange,提问作者Streamfighter
相关产品推荐
相关产品推荐

