Mam tę tablicę ciągów:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
Chciałbym ustalić, czy stringArray
zawiera value
. Jeśli tak, chcę zlokalizować jego pozycję w tablicy.
Nie chcę używać pętli. Czy ktoś może zasugerować, jak mogę to zrobić?
Array.IndexOf
zależy Ci na kapitalizacji? Czy"text1" == "TEXT1"
?Array.IndexOf
zwraca−1
tylko wtedy, gdy indeks jest ograniczony do 0. Ta sprawa by się zepsuła, więc bądź świadomy!var a = Array.CreateInstance(typeof(int),new int[] { 2 }, new int[] { 1 }); a.SetValue(1, 1); Console.WriteLine(Array.IndexOf(a, 26)); // 0
źródło
Możemy również skorzystać z
Exists
:źródło
char
której nie można przekonwertować naSystem.Predicate<char>
EDYCJA: Nie zauważyłem, że również potrzebujesz tej pozycji. Nie można używać
IndexOf
bezpośrednio na wartości typu tablicowego, ponieważ jest on jawnie zaimplementowany. Możesz jednak użyć:(Jest to podobne do wywołania
Array.IndexOf
zgodnie z odpowiedzią Darina - tylko alternatywne podejście. Nie jest dla mnie jasne, dlaczego jest zaimplementowane jawnie w tablicach, ale nieważne ...)IList<T>.IndexOf
źródło
if (months.Contains(model.Month))
Możesz użyć
Array.IndexOf()
- pamiętaj, że zwróci wartość -1, jeśli element nie został znaleziony i musisz sobie z tym poradzić.źródło
możesz spróbować w ten sposób ... możesz użyć Array.IndexOf (), jeśli chcesz również znać pozycję
źródło
IMO najlepszym sposobem sprawdzenia, czy tablica zawiera podaną wartość, jest użycie
System.Collections.Generic.IList<T>.Contains(T item)
metody w następujący sposób:Kompletny przykład kodu:
T[]
tablice prywatnie implementują kilka metodList<T>
, takich jak Count i Contains. Ponieważ jest to jawna (prywatna) implementacja, nie będzie można używać tych metod bez wcześniejszego rzutowania tablicy. To działa nie tylko w przypadku ciągów - możesz użyć tej sztuczki, aby sprawdzić, czy tablica dowolnego typu zawiera jakiś element, o ile klasa elementu implementuje IComparable.Pamiętaj, że nie wszystkie
IList<T>
metody działają w ten sposób. Próba użyciaIList<T>
metody Add na tablicy nie powiedzie się.źródło
Możesz tego spróbować, szuka indeksu zawierającego ten element i ustawia numer indeksu jako int, a następnie sprawdza, czy int jest większe niż -1, więc jeśli wynosi 0 lub więcej, to znaczy, że znalazł takie indeks - ponieważ tablice są oparte na 0.
źródło
źródło
Stworzyłem metodę rozszerzenia do ponownego użycia.
Jak to nazwać:
źródło
position
, o co prosi PO?źródło
Najprostsza i krótsza metoda byłaby następująca.
źródło
Contains
metody nie masz tych informacji