Imposta l’ordine di inserimento di mantenimento?
Java set di conservazione
A differenza di un set standard, viene preservato l’ordine dei dati in un set ordinato. Abbiamo usato i set ordinati quando avevamo bisogno dell’ordine in cui abbiamo inserito i dati da mantenere nel corso del programma. In un set ordinato, guardare i dati non cambia il suo ordine come farebbe in un set non ordinato.
Set ordinati da Python: una panoramica
La programmazione riguarda principalmente la gestione dei dati. Come sviluppatore di Python, troverai il modo di archiviare i dati in modo coerente con i tuoi obiettivi. A volte, dovrai preservare l’ordine di inserimento dei dati in un set, ad esempio, se stai gestendo le transazioni bancarie. Ogni transazione deve essere unica ed è importante preservare l’ordine in cui vengono create le transazioni. I set ordinati di Python ti aiutano a fare proprio questo.
In questo articolo, spiegheremo il concetto di programmazione di un set ordinato, prima di mostrarti come crearne uno in un programma Python.
Cos’è un set in Python?
Nel linguaggio di programmazione Python, un set è una raccolta di elementi unici. È una struttura di dati basata su tabella hash con ordinamento di elementi non definiti. È possibile sfogliare gli elementi di un set, aggiungerli o rimuoverli ed eseguire le operazioni di set standard di unione, intersezione, complemento e differenza.
A differenza degli elenchi, i set ordinari non preservano l’ordine in cui inseriamo gli elementi. Questo perché gli elementi in un set di solito non sono conservati nell’ordine in cui appaiono.
Cos’è un set ordinato?
A differenza di un set standard, viene preservato l’ordine dei dati in un set ordinato. Abbiamo usato i set ordinati quando avevamo bisogno dell’ordine in cui abbiamo inserito i dati da mantenere nel corso del programma. In un set ordinato, guardare i dati non cambia il suo ordine come farebbe in un set non ordinato.
Come creare un set ordinato in Python
Python ti consente di creare set ordinati nei tuoi programmi. Di seguito dimostreremo due modi per farlo: usare Python set ordinato pacchetto e un metodo manuale. Ma prima, stabiliamo un contesto. Diciamo che stai sviluppando un’app per una banca in cui è necessario registrare i numeri di transazione uno dopo l’altro in un documento di riepilogo. Ogni operazione di transazione bancaria è univoca.
Inoltre, si desidera l’ordine in cui vengono effettuate le transazioni per riflettere esattamente nel set di dati. Questa è un’opportunità perfetta per usare il Ordinato classe inclusa in Python’s ordinato_set pacchetto.
La classe set ordinata da Python
Il modo più semplice per creare un set ordinato in Python è utilizzare la classe ordinata. Si noti che questa classe non è inclusa per impostazione predefinita. Per prima cosa hai bisogno di assicurarti di avere il set ordinato pacchetto installato.
Notare che set ordinato è un pacchetto di terze parti e la sua funzionalità può cambiare indipendentemente dalla versione di Python che stai usando. Per installare il pacchetto, digita il seguente comando nel tuo terminale:
INSTALLARE PIP-Set ordinato
Ciò ti consentirà di utilizzare la classe OrderedSet.
Ora puoi creare un programma Python che utilizza la classe OrdinedSet. Vediamo come appare un semplice set ordinato:
da orderd_set import ordinateset shell = orderedset (["primo", "secondo", "secondo", "terzo"]) stampa (bast)
Innanzitutto, importiamo il pacchetto Ordered_Set appena installato. Quindi, creiamo un oggetto dalla classe OrdinedSet, passando i membri come parametri. L’istruzione di stampa in questo esempio emette quanto segue:
OrdinedSet (['First', 'Second', 'Third'])
La stringa “seconda” che abbiamo inserito due volte durante la creazione del set è ora sparita, mentre l’ordine in cui abbiamo inserito i dati viene mantenuto.
Ora, creiamo un set ordinato di transazioni bancarie. In uno scenario del mondo reale, vorresti mantenere in atto l’ordine di inserimento, per consentirti di analizzare le transazioni, controllare la frode e così via. Ecco come potrebbe apparire il programma:
da orderd_set import orderedset bankstatement = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]).
Viene creato il set ordinato.
Ora, se si desidera una determinata transazione, è possibile selezionare il set corrispondente di elementi utilizzando il suo indice:
. Print ("Transaction No", Bankstatement [1], "è stato registrato con successo")
Questo ti dà il seguente output:
Transazione n. Bk0002 è stata registrata con successo
Ma cosa succede se qualcuno volesse aggiungere una transazione che è già stata registrata, come “BK0004”? Se avessimo usato un elenco, questa azione sarebbe stata possibile. Fortunatamente, il set ordinato non lo consente. Eseguiamo il seguente codice:
Banktrs.Aggiungi ("BK0004") Stampa (Banktrs)
Il risultato della dichiarazione di stampa rimane invariato, dimostrando che il set ordinato ha ignorato l’azione:
OrdinedSet (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])
Questa funzione si rivela particolarmente utile in questo caso. Come programmatore, non dovrai preoccuparti di garantire che ogni membro dei dati sia unico.
Il pacchetto set ordinato contiene altre funzionalità degne di nota. Ti consente di eseguire operazioni utili come differenza, intersezione e unione utilizzando gli operatori -, & e |.
Imposta operazioni
Riscriviamo il programma per creare due diversi set ordinati che potrebbero rappresentare due dichiarazioni bancarie.
da ordered_set import orderedset bankstatement1 = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset (["bk0004", "bk0005", "bk0006", "bk0007", "bk0008"])
Abbiamo deliberatamente incluso le transazioni BK0004 e BK0005 in entrambe le dichiarazioni. Potrebbe essere il caso se il primo e il
1. Qual è lo scopo di un set ordinato in Python?
Un set ordinato in Python viene utilizzato per preservare l’ordine di inserimento dei dati, che è importante in scenari come la gestione delle transazioni bancarie.
2. In che modo un set differisce da un set ordinato in Python?
Un set in Python non preserva l’ordine degli elementi, mentre un set ordinato lo fa.
3. Come puoi creare un set ordinato in Python?
È possibile creare un set ordinato in Python utilizzando la classe OrdinedSet dal pacchetto ordinato. Innanzitutto, assicurarsi che il pacchetto sia installato, quindi importa la classe e crea un oggetto con gli elementi desiderati.
4. Cosa succede se si tenta di aggiungere un elemento duplicato a un set ordinato?
Un set ordinato non consente elementi duplicati, quindi provare ad aggiungere un elemento duplicato non cambierà il set.
5. Quali sono alcuni vantaggi dell’utilizzo di un set ordinato in Python?
Un vantaggio dell’utilizzo di un set ordinato è che non devi preoccuparti di garantire elementi unici, poiché gestisce automaticamente i duplicati. Inoltre, preserva l’ordine di inserimento dei dati, che può essere utile per l’analisi e l’elaborazione dei dati.
6. Puoi eseguire operazioni di set come Union e Intersection con un set ordinato?
Sì, il pacchetto set ordinato consente di eseguire operazioni impostate come differenza, intersezione e unione utilizzando gli operatori -, e e |.
7. Come puoi accedere ad elementi specifici in un set ordinato?
È possibile accedere ad elementi specifici in un set ordinato utilizzando l’indice dell’elemento, simile all’accesso agli elementi in un elenco.
8. È la classe di set ordinata inclusa per impostazione predefinita in Python?
No, la classe OrdinedSet non è inclusa per impostazione predefinita in Python. È necessario installare il pacchetto set ordinato per utilizzarlo.
9. La funzionalità del pacchetto set ordinato può cambiare indipendentemente dalla versione Python?
Sì, la funzionalità del pacchetto set ordinato è separata dalla versione di Python che stai usando. È un pacchetto di terze parti che può essere aggiornato e modificato in modo indipendente.
10. Come puoi installare il pacchetto set ordinato in Python?
È possibile installare il pacchetto set ordinato in Python utilizzando il comando PIP nel tuo terminale: “PIP Installa ordinato”.
Java set di conservazione
A differenza di un set standard, viene preservato l’ordine dei dati in un set ordinato. Abbiamo usato i set ordinati quando avevamo bisogno dell’ordine in cui abbiamo inserito i dati da mantenere nel corso del programma. In un set ordinato, guardare i dati non cambia il suo ordine come farebbe in un set non ordinato.
Set ordinati da Python: una panoramica
La programmazione riguarda principalmente la gestione dei dati. Come sviluppatore di Python, tu’Troverà modi per archiviare i dati in modo coerente con i tuoi obiettivi. A volte tu’Deve preservare l’ordine di inserimento dei dati in un set, ad esempio, se si gestiscono le transazioni bancarie. Ogni transazione deve essere unica ed è importante preservare l’ordine in cui vengono create le transazioni. Pitone’S Set ordinati ti aiutano a fare proprio questo.
In questo articolo, spiegheremo il concetto di programmazione di un set ordinato, prima di mostrarti come crearne uno in un programma Python.
Cos’è un set in Python?
Nel linguaggio di programmazione Python, un set è una raccolta di elementi unici. È una struttura di dati basata su tabella hash con ordinamento di elementi non definiti. Puoi sfogliare un set’S Elementi, aggiungili o rimuoverli ed eseguire le operazioni set standard di unione, intersezione, complemento e differenza.
A differenza degli elenchi, i set ordinari non preservano l’ordine in cui inseriamo gli elementi. Questo perché gli elementi in un set di solito non sono conservati nell’ordine in cui appaiono.
Cos’è un set ordinato?
A differenza di un set standard, viene preservato l’ordine dei dati in un set ordinato. Abbiamo usato i set ordinati quando avevamo bisogno dell’ordine in cui abbiamo inserito i dati da mantenere nel corso del programma. In un set ordinato, guardare i dati non cambia il suo ordine come farebbe in un set non ordinato.
Come creare un set ordinato in Python
Python ti consente di creare set ordinati nei tuoi programmi. Sotto noi’Dimostrare due modi per farlo: usare Python’S set ordinato pacchetto e un metodo manuale. Ma prima, lascia’s Stabilire un contesto. Permettere’s dì te’Re sviluppo di un’app per una banca in cui è necessario registrare i numeri di transazione uno dopo l’altro in un documento di riepilogo. Ogni operazione di transazione bancaria è univoca.
Inoltre, si desidera l’ordine in cui vengono effettuate le transazioni per riflettere esattamente nel set di dati. Questa è un’opportunità perfetta per usare il Ordinato Classe inclusa in Python’S ordinato_set pacchetto.
Pitone’S CLASSE SET ORDINATO
Il modo più semplice per creare un set ordinato in Python è utilizzare la classe ordinata. Si noti che questa classe non è inclusa per impostazione predefinita. Per prima cosa hai bisogno di assicurarti di avere il set ordinato pacchetto installato.
Notare che set ordinato è un pacchetto di terze parti e la sua funzionalità può cambiare indipendentemente dalla versione di Python che tu’sta usando. Per installare il pacchetto, digita il seguente comando nel tuo terminale:
INSTALLARE PIP-Set ordinato
Ciò ti consentirà di utilizzare la classe OrderedSet.
Ora puoi creare un programma Python che utilizza la classe OrdinedSet. Permettere’SE VEDERE COME UN SECCHIO SEMPRE ORDINATO:
da orderd_set import ordinateset shell = orderedset (["primo", "secondo", "secondo", "terzo"]) stampa (bast)
Innanzitutto, importiamo il pacchetto Ordered_Set appena installato. Quindi, creiamo un oggetto dalla classe OrdinedSet, passando i membri come parametri. L’istruzione di stampa in questo esempio emette quanto segue:
OrdinedSet (['First', 'Second', 'Third'])
La stringa ‘Secondo’ che siamo entrati due volte durante la creazione del set ora è sparito, mentre l’ordine in cui abbiamo inserito i dati viene mantenuto.
Adesso molla’s Crea un set ordinato di transazioni bancarie. In uno scenario del mondo reale, vorresti mantenere in atto l’ordine di inserimento, per consentirti di analizzare le transazioni, controllare la frode e così via. Ecco come potrebbe apparire il programma:
da orderd_set import orderedset bankstatement = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]).
Viene creato il set ordinato.
Ora, se si desidera una determinata transazione, è possibile selezionare il set corrispondente di elementi utilizzando il suo indice:
. Print ("Transaction No", Bankstatement [1], "è stato registrato con successo")
Questo ti dà il seguente output:
Transazione n. Bk0002 è stata registrata con successo
Ma cosa succede se qualcuno volesse aggiungere una transazione che è già stata registrata, come ad esempio “BK0004”? Se avessimo usato un elenco, questa azione sarebbe stata possibile. Fortunatamente, il set ordinato non lo consente. Permettere’S Esegui il seguente codice:
Banktrs.Aggiungi ("BK0004") Stampa (Banktrs)
Il risultato della dichiarazione di stampa rimane invariato, dimostrando che il set ordinato ha ignorato l’azione:
OrdinedSet (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])
Questa funzione si rivela particolarmente utile in questo caso. Come programmatore, hai vinto’deve preoccuparsi di garantire che ogni membro dei dati sia unico.
Il pacchetto set ordinato contiene altre funzionalità degne di nota. Ti consente di eseguire operazioni utili come differenza, intersezione e unione utilizzando gli operatori -, E E |.
Imposta operazioni
Permettere’s Riscrivi il programma per creare due diversi set ordinati che potrebbero rappresentare due dichiarazioni bancarie.
da ordered_set import orderedset bankstatement1 = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset (["bk0004", "bk0005", "bk0006", "bk0007", "bk0008"])
Abbiamo deliberatamente incluso le transazioni BK0004 e BK0005 in entrambe le dichiarazioni. Questo potrebbe essere il caso se la prima e la seconda affermazione coprono parzialmente lo stesso periodo di tempo.
Se vuoi vedere le transazioni che esistono solo in BankStatement1, basta eseguire il seguente bit di codice:
Diff = BankStatement1 - BankStatement2 Print ("Le transazioni uniche per il primo riepilogo sono", diff)
Questo ci dà il seguente risultato:
Le transazioni uniche al primo riepilogo sono ordinate (['BK0001', 'BK0002', 'BK0003'])
Ai fini della leggibilità, possiamo racchiudere il set di set ordinato all’interno di un elenco quando si visualizza i dati utilizzando questo codice:
Diff = BankStatement1 - BankStatement2 Print ("Le transazioni univoci al primo riepilogo sono", elenco (diff))
Ora, se è necessario recuperare solo le transazioni esistenti in entrambe le dichiarazioni, utilizzare l’istruzione di intersezione in questo modo:
inter = BankStatement1 e BankStatement2 Print ("Le transazioni comuni a entrambi i riepiloghi sono", elenco (inter))
Voi’Ottiene il risultato previsto:
Le transazioni comuni a entrambi i riassunti sono ordinati ['bk0004', 'bk0005']
Infine, se si desidera vedere tutte le transazioni di entrambe le dichiarazioni, eseguire semplicemente l’operazione sindacale:
Union = BankStatement1 | BankStatement2 Print ("Ecco tutte le transazioni di questi riassunti:", LIS (Union))
Questo ti darà il seguente output:
Ecco tutte le transazioni di questi riassunti: OrdinedSet ['Bk0001', 'Bk0002', 'Bk0003', 'Bk0004', 'Bk0005', 'Bk0006', 'Bk0007', 'Bk0008']
Il pacchetto ordinato_set rende la creazione e la manipolazione di set ordinati in Python semplice ed efficace.
Il metodo manuale
È anche possibile creare un set di dati ordinato completamente manualmente. Nel caso in cui non siate in grado di utilizzare il pacchetto set ordinato, puoi comunque utilizzare questa soluzione alternativa. Permettere’S Vedi come funziona questo metodo.
Innanzitutto, noi’Crea un array di stringhe contenente il nostro set di dati:
BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"]
Quindi, creiamo un ciclo per controlla ogni elemento, alla ricerca di duplicati. Se ce ne sono, verranno rimossi dal set. Per testare questo, noi’Ll include deliberatamente un elemento duplicato nell’array.
per stringa nell'intervallo (len (bankstatement), 1, -1): if bankstatement [string-1] in bankstatement [: string-1]: bankstatement.Pop (String-1)
Il Loop inizia a iterarsi dal retro dell’elenco, cioè dall’ultimo elemento. Prende quell’elemento (chiamato stringa sopra) e controlla se è già presente nel sottoinsieme dell’elenco fino a Ma Non includere l’elemento corrente (stringa). Se è già presente, rimuoviamo la menzione dell’elemento più vicino alla parte anteriore dell’elenco, ma manteniamo la menzione originale dell’elemento più vicino al retro dell’elenco.
Ora, quando stampiamo il contenuto dell’array, non ci sono duplicati e l’ordine viene mantenuto:
['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005', 'BK0006']
Questo ci consente di creare un set ordinato anche se non possiamo usare Python’Funzione dedicata!
Impara a codificare online
Python è un linguaggio di programmazione versatile con alcune opzioni per la creazione di set ordinati. Puoi utilizzare la classe OrderedSet per svolgere il lavoro, oppure puoi farlo manualmente se necessario.
Voglio andare oltre la creazione di set ordinata in Python?
Udacity’S Programma di programmazione progettata da esperti alla programmazione del programma Nanodegree è il tuo prossimo passo. Alla fine di questo corso, tu’Conoscono le basi della codifica e hanno le competenze per gestire con sicurezza scenari di programmazione del mondo reale utilizzando HTML, CSS, Python e altro ancora!
Esempi di codice completi
Esempio 1: Creazione set di transazione bancaria
from ordered_set import OrderedSet bankStatement = OrderedSet(["BK0001","BK0002","BK0003","BK0004","BK0005"]) print("Transaction no",bankStatement[1],"has been recorded successfully") bankTrs.Aggiungi ("BK0004") Stampa (Banktrs)
Esempio 2: diverso, unione, incrocio
da ordinated_set import orderedset bankstatement1 = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset ("bk0004", "bk0005", "bk0006", "bk0007", "bk0008"] Diffratement1 - banktatment1 - banktatment1 Al primo riepilogo ci sono ", elenco (diff)) inter = bankstatement1 e bankstatement2 print (" Le transazioni comuni a entrambi i riepiloghi sono ", elenco (inter)) Union = Bankstatement1 | BankStatement2 Print ("Ecco tutte le transazioni di questi riassunti:", Elenco (Union))
Esempio 3: il metodo manuale
BankStatement = ["Bk0001", "Bk0002", "Bk0003", "Bk0004", "Bk0004", "Bk0005", "Bk0006"] per stringa nell'intervallo (Len (Bankstatement), 1, -1): if Bankstatement [String-1] in Bankstatement [String-1: Bankstatementmentment.POP (String-1) Print (BankStatement)
Java set di conservazione?
Un set di java conserva l’ordine? Un metodo mi sta restituendo un set e presumibilmente i dati vengono ordinati ma iterando sul set, i dati non sono ordinati. C’è un modo migliore per gestirlo? Il metodo deve essere modificato per restituire qualcosa di diverso da un set?
30.6k 27 27 badge d’oro 91 91 badge d’argento 100 100 badge in bronzo
Chiesto il 25 maggio 2012 alle 10:27
User840930 User840930
5.084 21 21 Badge d’oro 62 62 badge d’argento 93 93 badge di bronzo
“Gli elementi non vengono restituiti in nessun ordine particolare (a meno che questo set non sia un’istanza di una classe che fornisce una garanzia).”È ciò che dice il metodo iteratore per un set. Trovato qui
25 maggio 2012 alle 10:29
13 Risposte 13
L’interfaccia set non fornisce alcuna garanzia di ordinazione.
Il suo Sub-Interface SortedSet rappresenta un set che viene ordinato secondo alcuni criteri. In Java 6, ci sono due contenitori standard che implementano SortedSet . Sono alberi da alberi e concorrenti .
Oltre all’interfaccia SordSet, c’è anche la classe LinkedHashset. Ricorda l’ordine in cui gli elementi sono stati inseriti nel set e restituisce i suoi elementi in quell’ordine.
10.9k 10 10 badge d’oro 70 70 badge d’argento 94 94 badge di bronzo
Risposta il 25 maggio 2012 alle 10:30
483K 107 107 BADGI GOLD 943 943 BADGI SILVER 1007 1007 BADGES BRONZO
Inoltre, a causa della diversa hashing di stringa in Java 8, l’ordinamento predefinito (Unsorted) in set e mappe cambierà. Se fai affidamento su ordini non preventivi, il tuo codice si comporterà diversamente in Java 8.
17 novembre 2014 alle 16:15
Capisco che la classe non ordinava è normale, ma il comportamento che mi aspettavo era di lasciarli mentre venivano introdotti e non scherzano con l’ordine, invece sta solo mescolando gli elementi ogni volta che uno è aggregato. La tua soluzione non è ottimale appassire perché dovrò implementare un’intera struttura per essere ordinata allo stesso modo in cui sono stati introdotti: s
25 febbraio 2019 alle 8:39
@White_King: un set è un concetto matematico che non contiene la nozione di “ordine di inserimento”, quindi ha senso che l’interfaccia Java segui le sue convenzioni. Ci sono set ordinati ma l’ordine è specificato da una relazione (comparatore in java), ancora una volta corrispondente alla definizione nella teoria dei set con la definizione in java. La tua aspettativa di mantenimento dell’ordine di inserimento probabilmente proviene da elenchi ma i set non sono elenchi.
9 agosto 2019 alle 10:53
4.396 11 11 badge d’oro 34 34 badge d’argento 58 58 badge di bronzo
Risposta il 25 maggio 2012 alle 10:29
Xiaofeng.li xiaofeng.li
8.117 2 2 badge d’oro 23 23 badge d’argento 30 30 badge di bronzo
Un elenco non è un set (non garantisce unicità dell’iscrizione).
6 giugno 2013 alle 22:03
In molti casi univoci di attività, l’elenco non può essere utilizzato solo per conservare l’ordine anziché impostare. LinkedHashset mantiene l’ordine e negozi unico.
9 luglio 2015 alle 15:34
Come molti membri hanno suggerito l’uso LinkedHashset per conservare l’ordine della raccolta. Puoi avvolgere il tuo set usando questa implementazione.
Ordineset L’implementazione può essere utilizzata per l’ordine ordinato ma per il tuo scopo LinkedHashset.
Anche dai documenti,
“Questa implementazione risparmia i suoi clienti dall’ordinamento non specificato, generalmente caotico fornito da Hashset, senza incorrere in aumento dei costi associati agli alberi. Può essere utilizzato per produrre una copia di un set che ha lo stesso ordine dell’originale, indipendentemente dall’implementazione del set originale: “
Imposta l’ordine di inserimento di mantenimento?
Quando gli elementi ottengono dall’hashset a causa di hashing, l’ordine che hanno inserito non viene mantenuto durante il recupero. Hashset memorizza gli elementi usando un meccanismo chiamato hashing. Possiamo ottenere l’attività data usando LinkedHashset. La classe LinkedHashset implementa una lista doppiamente collegata in modo che possa attraversare tutti gli elementi.
Esempio:
Input: HashsetInput = Produzione: HashSetPrint = Input: HashsetInput = Produzione: HashSetPrint =
Implementazione con hashset: (ordine non mantenuto)
Sintassi:
Hashset num = new hashset ();
Approccio:
- Crea oggetto hashset.
- Inserire più elementi nell’hashset.
- Stampa l’hashset.(Ordine non mantenuto)
Di seguito è riportato l’implementazione dell’approccio sopra:
gmamaladze / A_readme.MD
Molte persone assumono ingenuamente un normale .Net Hashset conserva l’ordine di inserimento. In effetti Hashset preserva accidentalmente l’ordine di inserimento fino a quando non si rimuove e aggiungi alcuni elementi. Esiste una tale struttura di dati in Java – LinkedHashset che rispetta l’ordine e ha O (1) RW volte.
No, non ho trovato un’implementazione corrispondente (funzionante) .NETTO. Questo è che ho scritto questo.
L’implementazione utilizza l’elenco collegato in combinazione con il dizionario per definire l’iterazione, l’ordinamento e allo stesso tempo consentire la rimozione di O (1).
L’ordine è non interessato se un elemento è reinsertato Nel set conserva la sua vecchia posizione.
Questo codice è distribuito con licenza MIT. Copyright (C) 2013 George Mamaladze Vedi Licenza.txt o http: // opensource.org/licenze/mit-license.PHP
Questo file contiene un testo Unicode bidirezionale che può essere interpretato o compilato in modo diverso da quello che appare di seguito. Per rivedere, aprire il file in un editor che rivela i caratteri Unicode nascosti. Ulteriori informazioni sui caratteri Unicode bidirezionali
// Questo codice è distribuito con licenza MIT. Copyright (c) 2013 George Mamaladze |
// Vedi la licenza.txt o http: // opensource.org/licenze/mit-license.PHP |
Utilizzo del sistema . Collezioni; |
Utilizzo del sistema . Collezioni . Generico; |
spazio dei nomi GMA . Datastrutture |
Classe pubblica ordinata < T >: Icollection |
Idictionary privato < T , LinkedListNode < T >> m_dictionary; |
Elenco Private Leadonly Linked < T >M_LinkedList; |
public OrdinedSet () |
: questo (EqualityComparer < T >. Predefinito ) |
> |
Public OrdinedSet (IEqualityComparer < T >confronto) |
M_Dictionary = Nuovo dizionario < T , LinkedListNode < T >> (confronto); |
M_LinkedList = new LinkedList < T >(); |
> |
conteggio int pubblico |
Ottenere |
> |
il bool virtuale pubblico isreadonly |
Ottenere |
> |
vuoto icollection < T >. Aggiungi (elemento t) |
Aggiungi articolo ) ; |
> |
public void clear () |
M_Linkedlist . Chiaro ( ) ; |
M_Dictionary . Chiaro ( ) ; |
> |
public bool rimozione (articolo t) |
LinkedListNode < T >nodo; |
bool trovato = m_dictionary . TryGetValue (elemento, nodo fuori); |
Se ( ! trovato) restituire false; |
M_Dictionary . Rimuovi oggetto ) ; |
M_Linkedlist . Rimuovere (nodo); |
restituire vero; |
> |
Ienumeratore pubblico < T >GetEnumerator () |
restituire m_linkedlist . GetEnumerator (); |
> |
Ienumerator Ienumerable . GetEnumerator () |
restituire getEnumerator (); |
> |
Public Bool contiene (T oggetto) |
restituire m_dictionary . Contienekey (articolo); |
> |
public void copto (t [] array, int arrayindex) |
M_Linkedlist . CopyTo (array, ArrayIndex); |
> |
public bool add (t oggetto) |
if (m_dictionary . Contienekey (articolo)) restituire false; |
LinkedListNode < T >node = m_linkedlist . AddLast (articolo); |
M_Dictionary . Aggiungi (elemento, nodo); |
restituire vero; |
> |
> |
> |
Questo file contiene un testo Unicode bidirezionale che può essere interpretato o compilato in modo diverso da quello che appare di seguito. Per rivedere, aprire il file in un editor che rivela i caratteri Unicode nascosti. Ulteriori informazioni sui caratteri Unicode bidirezionali
// Questo codice è distribuito con licenza MIT. Copyright (c) 2013 George Mamaladze |
// Vedi la licenza.txt o http: // opensource.org/licenze/mit-license.PHP |
usando il sistema; |
Utilizzo del sistema . Collezioni . Generico; |
Utilizzo del sistema . Linq; |
spazio dei nomi GMA . Datastrutture |
Classe pubblica OrdinedSext < T >: Ordinato < T >, Ho impostato |
public OrderEDSext () |
> |
Public OrderEDseText (IEqualityComparer < T >confronto) |
: Base (Comparatore) |
> |
public OrderDseText (ierumerable < T >collezione ) |
: Questo (collezione, EqualityComparer < T >. Predefinito ) |
> |
public OrderDseText (ierumerable < T >Collezione, IEqualityComparer < T >confronto) |
: questo (confronto) |
foreach (t oggetto in raccolta) |
Aggiungi articolo ) ; |
> |
> |
/// |
/// modifica il set corrente in modo che contenga tutti gli elementi presenti sia nel set corrente che nel |
/// Collezione specificata. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public void Unionwith (ierumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
foreach (elemento t nell’altro) |
Aggiungi (elemento); |
> |
> |
/// |
/// modifica il set corrente in modo che contenga solo elementi che si trovano anche in una raccolta specificata. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public void intersectwith (ienumerable < T >altro ) |
foreach (elemento t nell’altro) |
if (contiene (elemento)) continua; |
Rimuovere (elemento); |
> |
> |
/// |
/// Rimuove tutti gli elementi nella raccolta specificata dal set corrente. |
/// |
/// La raccolta di articoli da rimuovere dal set. |
/// |
Vuoto pubblico tranne (Inumerable < T >altro ) |
foreach (elemento t nell’altro) |
Rimuovere (elemento); |
> |
> |
/// |
/// modifica il set di corrente in modo che contenga solo elementi presenti nel set corrente o nel |
/// collezione specificata, ma non entrambi. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public void symmetricexceptwith (ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
foreach (elemento t nell’altro) |
if (contiene (elemento)) |
Rimuovere (elemento); |
> |
altro |
Aggiungi (elemento); |
> |
> |
> |
/// |
/// determina se un set è un sottoinsieme di una raccolta specificata. |
/// |
/// |
/// true se il set corrente è un sottoinsieme di; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public bool IssubSetof (ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
var alterthashset = new hashset < T >( altro ) ; |
Restituisce OtherHashset . IssupeReTof (this); |
> |
/// |
/// determina se il set corrente è un superset di una raccolta specificata. |
/// |
/// |
/// true se il set corrente è un superset di; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public bool IssupeReTof (Ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
restituire altro . Tutto (contiene); |
> |
/// |
/// determina se il set corrente è un superset corretto di una raccolta specificata. |
/// |
/// |
/// vero se l’oggetto è un superset corretto di |
///; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public bool ispropersuperseTof (ierumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
var alterthashset = new hashset < T >( altro ) ; |
Restituisce OtherHashset . IsPropersubSetof (questo); |
> |
/// |
/// determina se il set corrente è un sottoinsieme di proprietà (rigoroso) di una raccolta specificata. |
/// |
/// |
/// true se il set corrente è un sottoinsieme corretto di; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
public bool ispropersubset (ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
var alterthashset = new hashset < T >( altro ) ; |
Restituisce OtherHashset . IsPropersupereSetOf (this); |
> |
/// |
/// determina se il set di corrente si sovrappone alla raccolta specificata. |
/// |
/// |
/// true se il set corrente e condividono almeno un elemento comune; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
il bool pubblico si sovrappone (ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
if (count == 0) restituisce false; |
restituire altro . Qualsiasi (contiene); |
> |
/// |
/// determina se il set corrente e la raccolta specificata contengono gli stessi elementi. |
/// |
/// |
/// true se il set corrente è uguale a; altrimenti, falso. |
/// |
/// La raccolta da confrontare con il set corrente. |
/// |
Public Bool SetEquals (Ienumerable < T >altro ) |
if (altro == null) lancia nuovo argomentazione Nullexception (“altro”); |
var alterthashset = new hashset < T >( altro ) ; |
Restituisce OtherHashset . SetEquals (questo); |
> |
> |
> |
Questo file contiene un testo Unicode bidirezionale che può essere interpretato o compilato in modo diverso da quello che appare di seguito. Per rivedere, aprire il file in un editor che rivela i caratteri Unicode nascosti. Ulteriori informazioni sui caratteri Unicode bidirezionali
// Questo codice è distribuito con licenza MIT. Copyright (c) 2013 George Mamaladze |
// Vedi la licenza.txt o http: // opensource.org/licenze/mit-license.PHP |
#Region ha usato gli spazi dei nomi |
usando il sistema; |
Utilizzo del sistema . Collezioni . Generico; |
Utilizzo del sistema . Globalizzazione ; |
Utilizzo del sistema . Linq; |
Utilizzando Microsoft . VisualStudio . TestTools . Unittente; |
#Endregion |
spazio dei nomi GMA . Datastrutture . Test |
comando di classe interna |
public const char separator = ‘;’ ; |
operazione privata lettura m_operation; |
Private readonly t m_item; |
Comando pubblico (operazione operativa, T item) |
m_operation = operazione; |
m_item = item; |
> |
public void Esecute (ISET < T >impostato ) |
switch (m_operation) |
Operazione del caso . Aggiungere : |
impostato . Aggiungi (m_item); |
rottura ; |
Operazione del caso . Rimuovi: |
impostato . Rimuovere (m_item); |
rottura ; |
Operazione del caso . Chiaro : |
impostato . Chiaro ( ) ; |
rottura ; |
predefinito : |
lanciare nuovi notsupportedException (stringa . Formato (“Operation [] non è supportato. “, m_operation)); |
> |
> |
comando statico pubblico < T >Parse (String Token) |
var prefixchar = token [0]; |
var itemText = token . Substring (1); |
VAR OPERATION = CLABAROOPeration (prefixChar); |
T Item = |
! Corda . IsNulloRempty (ItemText) |
? (T) Converti . ChangeType (ItemText, typeof (t)) |
: impostazione predefinita (t); |
restituire un nuovo comando < T >(operazione, articolo); |
> |
Operazioni statiche private ChartOoperation (CHAR CH) |
Switch (Ch) |
Caso ‘+’: |
operazione di ritorno . Aggiungere ; |
caso ‘-‘ : |
operazione di ritorno . Rimuovere; |
caso ‘#’ : |
operazione di ritorno . Chiaro ; |
predefinito : |
lanciare nuovi notsupportedException (stringa . Formato (“Operation [] non è supportato. “, ch)); |
> |
> |
> |
Funzionamento di enum interno |
Aggiungere , |
Rimuovere , |
Chiaro |
> |
[Testclass] |
Classe pubblica OrdinedSetTest |
[ Metodo di prova ] |
public void vuoto () |
const string input = “”; |
cost stringa prevedibile = “”; |
Testx (input, previsto); |
> |
[ Metodo di prova ] |
public void add_one () |
const string input = “+1;”; |
const stringa prevedibile = “1”; |
Testx (input, previsto); |
> |
[ Metodo di prova ] |
public void add_many () |
const string input = “+1; +2; +3; +4; +5; +6”; |
String const previsto = “1; 2; 3; 4; 5; 6”; |
Testx (input, previsto); |
> |
[ Metodo di prova ] |
public void add_many_then_clear () |
const string input = “+1; +2; +3; +4; +5; +6;#”; |
cost stringa prevedibile = “”; |
Testx (input, previsto); |
> |
[ Metodo di prova ] |
public void add_many_then_clear_then_add () |
const string input = “+1; +2; +3; +4; +5; +6;#;+4; +3; +2;”; |
String const previsto = “4; 3; 2”; |
Testx (input, previsto); |
> |
[ Metodo di prova ] |
public void aggiungi_and_removes_mixed () |
const string input = “+1; +2; +3; +4; -2; -3; +2; +3; +5”; |
stringa const prevista = “1; 4; 2; 3; 5”; |
Testx (input, previsto); |
> |
Private void testx (input stringa, stringa prevista) |
Ho impostato < int >Set = new OrderDSext < int >(); |
Eseguire (set, input); |
Assertset (previsto, set); |
> |
vuoto privato assertset < T >(stringa prevista, ienumerable < T >effettivo ) |
var expactedArray = |
previsto |
. Diviso (comando < int >. Separatore) |
. Dove (s => ! corda . Isnullorempty (s)) |
. Seleziona (token => converti . ChangeType (token, typeof (t))) |
. Lancio < T >(); |
Assertenumerables (ExpactedArray, effettivo); |
> |
assertenumerable privato del vuoto statico < T >(Ienumerable < T >Previsto, IEnumerable < T >effettivo ) |
String Separator = Command < T >. Separatore . ToString (CultureInfo . InvariantCulture); |
stringa previsto = stringa . Unisciti (separatore, previsto . Seleziona (item => Convert . ToString (articolo))); |
String ActorText = String . Unisciti (separatore, effettivo . Seleziona (item => Convert . ToString (articolo))); |
Affermare . Areequal (atteso text, attuale); |
> |
Private void Esecute (ISET < int >SET, String Program) |
comandi var = |
programma |
. Diviso (comando < int >. Separatore) |
. Dove (s => ! corda . Isnullorempty (s)) |
. Seleziona (comando < int >. Analizzare); |
foreach (comando var nei comandi) |
comando . Eseguire (set); |
> |
> |
> |
> |