arrays - 基于索引从数组中一一删除元素的算法
问题描述
这是对嵌入式系统中问题的最纯粹情况的简化,具有我无法控制的任意限制
让有任何东西的数组,例如单词:
["apple", "pear", "banana", "orange"]
让有一个索引数组(从一个开始)来删除项目:
[1,3]
我们需要一个函数来返回从起始数组中删除这些索引的结果,在这个例子中,结果应该是:
["pear", "orange"]
因为它删除了索引1
和3
但是,唯一可以接受的操作是通过索引从数组中删除一项并对其进行变异的函数,例如:
我们有原始数组["apple", "pear", "banana", "orange"]
我们要删除项目[1,3]
我们removeItem(1)
结果是["pear", "banana", "orange"]
我们要删除的下一个项目是原始数组索引3
处的项目,但是,当前索引处的项目是,因此,删除项目的天真的方法不起作用,因为它会导致删除,最终结果:"banana"
3
"orange"
"orange"
["pear", "banana"]
代替["pear", "orange"]
解决方案
如果索引已排序,那么您只需在每次删除元素时将索引减一:
for i = 1 .. len(indices)
elements.removeItem(indices[i] - i + 1)
或者,向后删除项目。这可能也更有效,具体取决于删除过程的实施:
for i = len(indices) .. 1
elements.removeItem(indices[i])
推荐阅读
- c# - 从 c# 调用存储过程返回“?????” 在 varchar 响应中
- elasticsearch - 为什么fluentd没有启动?
- python - 带有python的cElementTree没有按预期工作
- django - 如何在 Django 中验证 OAuth2 状态?
- websocket - API Gateway WebSocket API postConnection 超时
- c# - c# shuffle list determining percentage
- jenkins - 封闭网络中的简单 Jenkins 通知?
- c - C 套接字编程错误
- rabbitmq - Rabbit 为 AMQP 1.0 消息节省额外字节
- python - 如何在 tox 中要求特定的包版本?