Possiedo un numero simultaneo di BlockingCollection
con elementi ripetuti. Come può modificarlo per aggiungere o ottenere elementi distinti?Raccolte simultanee ed elementi univoci
risposta
L'archivio di supporto predefinito per BlockingCollection
è un ConcurrentQueue
. Come ha fatto notare qualcun altro, è piuttosto difficile aggiungere elementi distinti usando quello.
Tuttavia, è possibile creare il proprio tipo di raccolta che implementa IProducerConsumerCollection
e passarlo al costruttore BlockingCollection
.
Immaginate un ConcurrentDictionary
che contenga le chiavi degli articoli attualmente in coda. Per aggiungere un elemento, chiami prima il TryAdd
sul dizionario e, se l'elemento non è nel dizionario, lo aggiungi e lo aggiungi alla coda. Take
(e TryTake
) ottiene l'elemento successivo dalla coda, lo rimuove dal dizionario e lo restituisce.
Preferirei se ci fosse un simultaneo HashTable
, ma poiché non ce n'è uno, dovrete fare con ConcurrentDictionary
.
- 1. Anteprima ed elaborazione simultanee della fotocamera
- 2. Django form integrityerror per operazioni simultanee su campi univoci
- 3. Le operazioni di linq su raccolte simultanee thread safe?
- 4. Perché non ci sono raccolte simultanee in C#?
- 5. Eventi ed elementi DOM
- 6. elementi univoci in un elenco haskell
- 7. Come garantire che l'elenco contenga elementi univoci?
- 8. Contare elementi univoci nella matrice senza ordinamento
- 9. perl: conta gli elementi univoci nell'array
- 10. CKEditor ed elementi di fuga
- 11. Passa attraverso tutte le raccolte Mongo ed esegui la query
- 12. Inserimento ed eliminazione di nodi ed elementi XML usando Nokogiri
- 13. Qual è la differenza tra SynchronizedCollection <T> e le altre raccolte simultanee?
- 14. Valori enumerici non univoci
- 15. Raggruppa e conta gli elementi univoci in un elenco
- 16. Trovare elementi univoci in un array di stringhe in C
- 17. Zend_Form notazione array ed elementi vuoti nomi
- 18. Elementi di corrispondenza tra 2 raccolte con Linq in C#
- 19. Genera colori univoci
- 20. Giuntura sulle raccolte
- 21. Traduzioni simultanee su Android
- 22. Richieste simultanee CasperJS
- 23. JUnit 4 confrontare le raccolte
- 24. Elenchi univoci da un elenco
- 25. MongoDB - Impaginazione basata su campi non univoci
- 26. Utilizzo di .on() ed e.stopPropagation() sugli elementi dinamici
- 27. coordinati ed eliminazione di elementi in lista di tuple
- 28. HTML5 - come comprimere ed espandere degli elementi della tabella complicati
- 29. C# Elenco delle domande simultanee
- 30. Spring Websockets Max. Connessioni simultanee
L'aggiunta di elementi distinti sembra essere [sorprendentemente difficile] (http://stackoverflow.com/questions/6603969/how-to-access-the-underlying-default-concurrent-queue-of-a-blocking-collection) se non impossibile. 'BlockingCollection' implementa' IEnumerable ', quindi puoi usare' Distinct() '. –
È possibile utilizzare il codice fornito nella domanda StackOverflow collegata da GertArnold, ma restituire sempre true nell'implementazione TryAdd e TryTake di un IProducerConsumerCollection. Questo funzionerebbe. So che è una forma terribile, ma dovrebbe funzionare, e BlockingCollection si sta già rompendo in quanto getta un'eccezione. Che cosa terribilmente fastidiosa. – Kevek