Sto lavorando a un processo di aggiornamento che inserisce elementi in un elenco ordinato e elabora gli indici di tali elementi nell'elenco ordinato.
Per aiutarmi con questo, ho creato una lista ordinata con un metodo "insert" che restituisce l'indice del nuovo elemento nella lista. Ad esempio, dato un elenco di [1, 3, 5]
, quindi insert(4)
cambierà la lista in [1, 3, 4, 5]
e restituirà 2
(0-indicizzato). Quindi elaboro il risultato con process(2)
.
Attualmente, quando devo fare più aggiornamenti, faccio qualcosa di simile a
for el in elements
index = list.insert(el)
beginUpdates()
process(index)
endUpdates()
In desidera ottimizzare i tempi di aggiornamento elaborando più indici in un singolo aggiornamento. Ovviamente, quanto segue sarebbe errato:
indices = []
for el in elements
indices.append(list.insert(el))
beginUpdates()
for index in indices
process(index)
endUpdates()
perché ogni inserimento potrebbe invalidare un indice calcolato in precedenza. Ad esempio:
list = [1, 3, 5]
index1 = list.insert(4) // index of 4: 2
index2 = list.insert(2) // index of 4: 3
Ora, se I process(index1)
, elabora l'indice sbagliato.
Quindi penso che, nello stesso modo in cui posso elaborare gli indici in batch, dovrei avere un metodo per inserire in batch gli elementi e ottenere i loro indici corretti. Qualcosa che mi permetta di fare
indices = list.batchInsert(elements)
beginUpdates()
for index in indices
process(index)
endUpdates()
Esiste un algoritmo che può farlo elegantemente?