Attualmente, sto testando ogni elemento intero l'uno contro l'altro per trovare quelli corrispondenti. Gli array non contengono duplicati all'interno del proprio set. Inoltre, gli array non sono sempre di uguale lunghezza. Ci sono trucchi per accelerare? Lo sto facendo migliaia di volte, quindi sta iniziando a diventare un collo di bottiglia nel mio programma, che è in C#.Qual è il modo più veloce per trovare il numero di corrispondenze tra gli array?
risposta
Utilizzare un HashSet
var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);
Il set contiene ora solo i valori che esistono in entrambi gli array.
Penso che tu voglia .Intersect piuttosto che .Union –
Ahh cervello scoreggia! Grazie. L'ho modificato – Josh
Ho appena provato HashSet con IntersectWith ed è due volte più lento rispetto all'iterazione di tutti gli elementi. –
Si potrebbe usare LINQ:
var query = firstArray.Intersect(secondArray);
O se gli array sono già ordinati si potrebbe iterare i due array da soli:
int[] a = { 1, 3, 5 };
int[] b = { 2, 3, 4, 5 };
List<int> result = new List<int>();
int ia = 0;
int ib = 0;
while (ia < a.Length && ib < b.Length)
{
if (a[ia] == b[ib])
{
result.Add(a[ia]);
ib++;
ia++;
}
else if (a[ia] < b[ib])
{
ia++;
}
else
{
ib++;
}
}
@Mark: il tuo codice suppone silenziosamente che gli array siano ordinati – Vlad
John ha già dichiarato che gli array sono ordinati nei commenti sopra. –
Se tale confronto è un collo di bottiglia nel vostro programma, stai forse usando una struttura di dati inappropriata. Il modo più semplice potrebbe essere quello di mantenere ordinati i tuoi dati. Quindi, per trovare le voci comuni, è necessario attraversare entrambi gli array una sola volta. Un'altra opzione sarebbe mantenere i dati in un HashSet.
- 1. Qual è il modo più veloce per confrontare due array di byte?
- 2. Qual è il modo più veloce per confrontare due array per l'uguaglianza?
- 3. Qual è il modo più veloce per calcolare la distribuzione di frequenza per array in C#?
- 4. array_push() vs. $ array [] = .... Qual è il più veloce?
- 5. Qual è il modo più veloce per verificare le cifre duplicate di un numero?
- 6. Qual è il modo più veloce per calcolare una grande potenza di 2 modulo un numero
- 7. Qual è il modo più veloce per cercare tra le stringhe in Objective-C?
- 8. Qual è il modo più veloce per confrontare le patch di un array?
- 9. Il modo più veloce per trovare 2 numeri mancanti in un array
- 10. Il modo più veloce per comunicare tra C++ e C#
- 11. Il modo più veloce per trovare una stringa in un array di stringhe
- 12. WCF - qual è il legame più veloce?
- 13. Il modo più veloce per copiare il contenuto di un vettore in un array?
- 14. Il modo più veloce per ottenere il numero di cifre su un numero?
- 15. Modo più veloce di inizializzare gli array in Delphi
- 16. Qual è il modo più veloce per sommare una collezione in Scala
- 17. Il modo più efficace per trovare il conteggio delle corrispondenze di una stringa rispetto a una serie di parole?
- 18. Il modo più efficace per trovare corrispondenze parziali di stringhe in file di grandi dimensioni (python)
- 19. Ripristina array C int a zero: il modo più veloce?
- 20. Qual è il modo più semplice per scorrere su un array di array?
- 21. Qual è il modo più elegante di combinare gli optional?
- 22. Il modo più veloce per ottenere il numero di pixel bianchi in un'immagine binaria utilizzando OpenCV
- 23. .NET - SQL Select -> Array. Qual è il modo più veloce?
- 24. Qual è il modo più veloce per ottenere più copie di un albero in python?
- 25. Qual è il modo più semplice/veloce per scoprire quando è stato creato un ramo git?
- 26. Qual è il modo più veloce per estrarre determinate righe e colonne da un ndarray Numpy?
- 27. Qual è il modo più veloce per trovare la somma maggiore di elementi adiacenti M in una matrice
- 28. Modo rapido per trovare il prossimo multiplo di un numero
- 29. Qual è il modo più veloce per convertire un float [] in un byte []?
- 30. Qual è il modo più veloce per cercare un elenco <T> su più proprietà?
È necessario semplicemente un elenco univoco di tutti gli interi esistenti in entrambi gli array? – Thomas
Per aggiungere al commento di Thomas, gli array sono ordinati? –
Sarebbe un altro modo di dirlo. Una lista unica comune in entrambi i set. Sì, sono ordinati. –