Jaki byłby najlepszy sposób spojrzenia na element a, string[]
aby sprawdzić, czy zawiera element. To była moja pierwsza próba. Ale może jest coś, co przeoczam. Rozmiar tablicy nie będzie większy niż 200 elementów.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Wiem, że to jest stare, ale chciałem, aby nowi czytelnicy wiedzieli, że istnieje nowa metoda, aby to zrobić, używając typów ogólnych i metod rozszerzających.
Możesz przeczytać mój post na blogu, aby zobaczyć więcej informacji o tym, jak to zrobić, ale główna idea jest taka:
Dodając tę metodę rozszerzenia do kodu:
możesz przeprowadzić wyszukiwanie w ten sposób:
Działa na każdym typie (o ile utworzysz dobrą metodę równości). Na pewno każdy typ wartości.
źródło
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
co chcę zrobić, to przejrzeć, kto datatable w pierwszej kolumnie, aby sprawdzić, czy wartości nie kończą się żadnym z następujących ciągów ... jeśli nie, chcę zwrócić ciąg stwierdzający, że brakuje wartości,.00
na przykład używając twojego przykładu Wydaje się, że nie mogę uruchomić tego, jest to nieco trudniejsze, ponieważ nie chcę zwracać wartości bool Zmieniłem twoją metodę, aby zwracała ciąg, ale nadal nie działa żadne sugestiepublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Po prostu szukasz funkcji Array.Exists (lub metody rozszerzenia Contains, jeśli używasz .NET 3.5, co jest nieco wygodniejsze).
źródło
Linq (dla s & g's):
lub w zależności od wymagań
źródło
Czy tablica jest posortowana? Jeśli tak, możesz przeprowadzić wyszukiwanie binarne . Oto również implementacja .NET. Jeśli tablica jest posortowana, wyszukiwanie binarne poprawi wydajność w stosunku do dowolnego rozwiązania iteracyjnego.
źródło
Tablice mają ogólnie kiepską strukturę danych, jeśli chcesz zapytać, czy dany obiekt znajduje się w kolekcji, czy nie.
Jeśli będziesz często przeprowadzać to wyszukiwanie, może warto użyć
Dictionary<string, something>
zamiast tablicy. Wyszukiwanie w słowniku to O (1) (czas stały), podczas gdy przeszukiwanie tablicy to O (N) (zajmuje czas proporcjonalny do długości tablicy).Nawet jeśli tablica zawiera maksymalnie 200 pozycji, jeśli wykonasz wiele takich wyszukiwań, słownik prawdopodobnie będzie szybszy.
źródło
Możesz również użyć LINQ do iteracji po tablicy. lub możesz użyć metody Find, która zabiera delegata do wyszukania. Jednak myślę, że metoda znajdowania jest nieco droższa niż zwykła pętla.
źródło
Jak wielokrotnie wspomniano w powyższym wątku, jest to zależne od używanego frameworka. .Net Framework 3 i nowsze wersje mają metody .Contains () lub Exists () dla tablic. W przypadku innych ram poniżej można wykonać następującą sztuczkę zamiast przechodzić przez pętlę po tablicy ...
Nie jestem pewien co do wydajności ... Dave
źródło
Jest to szybsze niż ręczne iterowanie po tablicy:
źródło
Jeśli nie chcesz lub po prostu nie możesz używać Linq, możesz również użyć
Array.Exists(...);
funkcji statycznej :https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Kiedy Predicate zwróci wartość true, gdy catInside również będzie prawdziwe.
źródło