Quale sarebbe il modo più veloce per verificare se una stringa contiene corrispondenze in un array di stringhe in C#? Posso farlo usando un ciclo, ma penso che sarebbe troppo lento.C# Controllare se la stringa contiene corrispondenze in un array di stringhe
risposta
È possibile combinare le stringhe con espressioni regolari o affermazioni e quindi "eseguirlo in un unico passaggio", ma tecnicamente la regex eseguirà comunque un ciclo internamente. In definitiva, è necessario il ciclo.
OK, l'ho fatto con un ciclo allora. – david
@david, anche le regex devono essere ripetute, penso che nella maggior parte dei casi è ancora più veloce di farlo manualmente. Inoltre, aiuta a un codice più pulito e quindi più facile da mantenere, ad esempio, è necessario modificare i criteri di corrispondenza. – xandy
Alcune persone, quando si trovano di fronte a un problema, pensano: "Lo so, userò le espressioni regolari."Ora hanno due problemi. –
utilizzando LINQ:
return array.Any(s => s.Equals(myString))
Certo, si potrebbe desiderare di prendere la cultura ed il caso in considerazione, ma questa è l'idea generale. Inoltre, se l'uguaglianza non è ciò che intendevi per "corrispondenze", puoi sempre la funzione che devi usare per "corrispondenza".
Per non parlare del fatto che si sta ancora procedendo in loop, proprio dietro le quinte. – Dinah
Se la "matrice" non cambierà mai (o cambierà solo raramente), e avrai molte stringhe di input che stai testando contro di essa, allora potresti costruire un HashSet<string>
dalla matrice. HashSet<T>.Contains
è un'operazione O (1), anziché un ciclo che è O (N).
Ma ci vorrebbe un po '(piccolo) tempo per costruire l'HashSet. Se la matrice cambia frequentemente, allora un ciclo è l'unico modo realistico per farlo.
Io davvero non riuscivo a capire se questo è assolutamente il modo più veloce, ma uno dei modi che ho fatto comunemente questo è:
Questo sarà verificare se la stringa contiene una delle stringhe dell'array:
string[] myStrings = { "a", "b", "c" };
string checkThis = "abc";
if (myStrings.Any(checkThis.Contains))
{
MessageBox.Show("checkThis contains a string from string array myStrings.");
}
per verificare se la stringa contiene tutte le stringhe (elementi) della matrice, è sufficiente modificare myStrings.Any
nella if per myStrings.All
.
Non so che tipo di applicazione questo è, ma ho spesso bisogno di utilizzare:
if (myStrings.Any(checkThis.ToLowerInvariant().Contains))
Quindi, se si sta verificando a vedere l'input dell'utente, non importa, se l'utente immette la stringa in lettere MAIUSCOLE, potrebbe essere facilmente invertita utilizzando ToLowerInvariant().
Spero che questo ha aiutato!
È bello, ma se si volesse eseguire il controllo nella direzione opposta ... cioè verificare se la sottostringa esiste negli elementi dell'array –
Che funziona bene per me:
string[] characters = new string[] { ".", ",", "'" };
bool contains = characters.Any(c => word.Contains(c));
Di molte soluzioni, questa è l'unica che ha funzionato all'interno di una dichiarazione 'Where' in ASP.NET Core. – VSG24
- 1. Controllare se la stringa contiene lettere iniziali
- 2. Controllare se la stringa contiene tutti "?"
- 3. Controllare se una stringa contiene una stringa
- 4. controllare se un array contiene (solo valori numerici)
- 5. Controllare se la stringa contiene solo lettere in javascript
- 6. Come controllare se stringa contiene '+' carattere
- 7. Controllare se parola contiene stringa in Java Regex
- 8. Controllare se la stringa contiene caratteri non numerici
- 9. La stringa contiene altre due stringhe
- 10. Come controllare se una stringa contiene una sottostringa in Delphi
- 11. Controllare se la stringa presente in un file di testo
- 12. C - stringa suddivisa in un array di stringhe
- 13. Array di stringhe di celle - controllare gli elementi in Matlab
- 14. Corrispondenze di stringhe indistinte
- 15. UIImage, controllare se contiene un'immagine
- 16. Controllare se un ComboBox contiene elemento
- 17. Controllare se l'URL contiene parametri
- 18. In C#, come verificare se una stringa contiene un intero?
- 19. Controllare se array di celle è un sottoinsieme di un nother in Matlab
- 20. Controllare se matrice contiene il valore
- 21. Verificare se una lista di stringhe contiene un valore
- 22. Se la stringa contiene la barra diretta
- 23. Verificare se la stringa è un carattere di punteggiatura
- 24. QTP: Verifica se una serie di stringhe contiene un valore
- 25. Array di stringhe in C
- 26. Se la stringa non contiene alcuna lista di stringhe in python
- 27. Ruby - Come verificare se una stringa contiene tutte le parole in un array?
- 28. Come verificare se una stringa si trova in una serie di stringhe in C?
- 29. Più corrispondenze di stringhe con indexOf()
- 30. jquery: controllare se la stringa esiste in elemento, tornare booleano
Perché pensi che sarebbe stato troppo lento? L'hai provato? Qual è la dimensione tipica del tuo set di dati? Indovinare così è una perdita di tempo. –
Potete chiarire gli input e il risultato desiderato? –
Contiene circa 60 articoli, ma nello stesso evento ho più codice. Le prestazioni sono OK, ma mi stavo chiedendo se avrei potuto ottimizzare questo. – david