Jaki byłby najszybszy sposób sprawdzenia, czy ciąg zawiera jakiekolwiek dopasowania w tablicy ciągów w języku C#? Mogę to zrobić za pomocą pętli, ale myślę, że byłoby zbyt wolno.C# Sprawdź, czy ciąg zawiera jakiekolwiek dopasowania w tablicy łańcuchowej
Odpowiedz
Można łączyć ciągi z wyrażeniem regularnym lub instrukcjami, a następnie "robić to w jednym przebiegu", ale technicznie rzecz biorąc, regex nadal wykonuje pętlę wewnętrznie. Ostatecznie, pętla jest konieczna.
W porządku, zrobiłem to z pętlą. – david
@david, nawet regex potrzebuje pętli, myślę, że w większości przypadków jest jeszcze szybszy niż robi to ręcznie. Co więcej, pomaga to w oczyszczeniu kodu, a przez to łatwiejsze do utrzymania, powiedzmy, musisz zmienić kryteria dopasowania. – xandy
Niektórzy ludzie, gdy stają w obliczu problemu, myślą: "Wiem, użyję wyrażeń regularnych."Teraz mają dwa problemy. –
Używanie LINQ:
return array.Any(s => s.Equals(myString))
prawda, może chcesz wziąć kulturę i sprawy pod uwagę, ale to ogólna idea. Ponadto, jeśli równość nie jest tym, co masz na myśli przez "zapałki", zawsze możesz użyć funkcji, której potrzebujesz do "dopasowania".
Nie wspominając już o tym, że wciąż zapętlasz się - tuż za kulisami. – Dinah
Jeśli "tablica" nigdy się nie zmieni (lub zmieni tylko nieczęsto), a będziesz miał wiele ciągów wejściowych, które testujesz przeciwko niemu, to możesz zbudować z tablicy tablicę HashSet<string>
. HashSet<T>.Contains
jest operacją O (1), w przeciwieństwie do pętli O (N).
Ale potrzeba trochę (małej) ilości czasu na zbudowanie HashSet. Jeśli tablica zmienia się często, to jedyną realistyczną drogą jest pętla.
ja naprawdę nie mogę powiedzieć, czy jest to absolutnie najszybszy sposób, ale jeden ze sposobów, jakie powszechnie zrobione to:
Będzie to sprawdzić, jeśli ciąg zawiera którykolwiek z ciągów znaków z tablicy:
string[] myStrings = { "a", "b", "c" };
string checkThis = "abc";
if (myStrings.Any(checkThis.Contains))
{
MessageBox.Show("checkThis contains a string from string array myStrings.");
}
aby sprawdzić, czy ciąg zawiera wszystkie sznurki (elementów) z tablicy, wystarczy zmienić myStrings.Any
w if do myStrings.All
.
Nie wiem, jakiego rodzaju aplikacji jest to, ale często trzeba użyć:
if (myStrings.Any(checkThis.ToLowerInvariant().Contains))
Więc jeśli sprawdzamy danych wprowadzonych przez użytkownika, to nie będzie miało znaczenia, czy użytkownik wpisze łańcuch w literach CAPITAL, można to łatwo odwrócić za pomocą ToLowerInvariant().
Mam nadzieję, że to pomogło!
To miło, ale co jeśli chcesz wykonać sprawdzanie w przeciwnym kierunku ... tzn. Sprawdź, czy ten podciąg istnieje w elementach tablicy –
To działa dobrze dla mnie:
string[] characters = new string[] { ".", ",", "'" };
bool contains = characters.Any(c => word.Contains(c));
Z wielu rozwiązań, Jest to jedyny, który działał wewnątrz instrukcji 'Where' w środowisku ASP.NET Core. – VSG24
- 1. Sprawdź, czy ciąg zawiera jakiekolwiek podciągi z tablicy
- 2. Sprawdź, czy ciąg zawiera słowo w tablicy
- 3. Sprawdź, czy ciąg zawiera podłańcuch
- 4. Sprawdź, czy ciąg zawiera określony ciąg przy użyciu tablicy
- 5. Sprawdź, czy ciąg zawiera inny ciąg
- 6. Sprawdź elementy tablicy ciąg zawiera tylko elementy w innej tablicy
- 7. Sprawdź, czy ciąg zawiera wiodące litery
- 8. Sprawdź, czy ciąg zawiera datę, czy nie.
- 9. Sprawdź, czy ciąg zawiera tylko znaki ASCII?
- 10. Sprawdź, czy ciąg zawiera numery Java
- 11. Sprawdź, czy ciąg ruby zawiera białe spacje.
- 12. Sprawdź, czy ciąg zawiera adres e-mail?
- 13. Sprawdź, czy ciąg zawiera znaki spoza cyfr
- 14. Sprawdź, czy ciąg zawiera tylko zestaw liter
- 15. Sprawdź, czy ciąg wewnątrz tablicy javascript
- 16. Sprawdź, czy łańcuch zawiera którykolwiek z łańcuchów z tablicy
- 17. Sprawdź, czy tablica zawiera wartości
- 18. C++ Sprawdź, czy element istnieje w tablicy
- 19. Sprawdź, czy element znaleziony w tablicy C++
- 20. Sprawdź, czy ciąg zawiera wszystkie znaki innego ciągu w Ruby
- 21. Sprawdź, czy ciąg zawiera słowo, ale tylko w określonej pozycji?
- 22. Sprawdź, czy ciąg zawiera nic oprócz adresu URL w PHP
- 23. Czy ciąg w tablicy?
- 24. Prosty sposób sprawdzenia, czy ciąg zawiera inny ciąg w C?
- 25. Xcode: Policz elementy w tablicy łańcuchowej
- 26. Ruby - Jak sprawdzić, czy ciąg zawiera wszystkie słowa w tablicy?
- 27. Sprawdź, czy listy udostępniają jakiekolwiek elementy w pythonie
- 28. Linux/bin/sh sprawdź, czy ciąg zawiera X
- 29. Sprawdź, czy tablica zawiera część ciągu znaków w Swift?
- 30. Sprawdź, czy ciąg zawiera wszystkie wejścia na liście
Dlaczego sądzisz byłoby zbyt wolno? Testowałeś to? Jaki jest typowy rozmiar twojego zestawu danych? Zgadywanie w ten sposób jest stratą czasu. –
Czy możesz wyjaśnić dane wejściowe i pożądany wynik? –
Zawiera około 60 pozycji, ale w tym samym wydarzeniu mam więcej kodu. Wydajność jest w porządku, ale zastanawiałem się, czy mógłbym to zoptymalizować. – david