1), jeśli chcesz wyszukać tylko raz i chcesz zachować tablicę źródłowego, można użyć to:
public static void example1()
{
string[] myarr = { "good", "Hello", "this", "new" };
var str = "new";
var res= Array.FindIndex(myarr, x=>string.Equals(x, str, StringComparison.InvariantCultureIgnoreCase));
}
2) jeśli będziesz szukać wielokrotnie będzie lepiej użyć to:
public static void example1()
{
string[] myarr = {"good", "Hello", "this", "new"};
var str = "new";
var res = Array.IndexOf(Array.ConvertAll(myarr, ToStringlowerCase), str.ToLowerInvariant());
}
3) powyżej odpowiedź jest błędna:
string array[] = {"hello", "hi", "bye" , "welcome" , "hell"}
Int Indexofary = Array.FindIndex(array, t => t.IndexOf("hell", StringComparison.InvariantCultureIgnoreCase) >=0);
nie działa w ogóle, ponieważ nie wyszukuje ciąg, ale podciąg.
Algorytm iteracji słowa tablicy, gdy 1-ta słowo „cześć” podjęte, algorytm próbuje znaleźć indeks „piekło” i wskaźnik ten wynosi 1. 1> 0, a następnie algorytm zakończy się bez przechodzenia do innych słów.
Jeśli nie chcesz wyszukiwać ciągów, ale chcesz wyszukiwać ciągi, algorytm powinien zostać poprawiony. Ten algorytm można naprawić, dodając opcję sprawdzenia, czy podłańcuch rozpoczyna się od pierwszego znaku t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0
, a długość słów jest równa str.Length == t.Length
. Poprawiono:
public static int example3()
{
string[] myarr = { "hHello", "hi", "bye", "welcome", "hell" };
var str = "hell";
return Array.FindIndex(myarr, t => t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0 && str.Length == t.Length);
}
pamiętać, że ta odpowiedź wyszukuje _substring_ łańcucha odniesienia w każdym elemencie tablicy wejściowej wyliczone przez 'Array.FindIndex()', z powodu użycia 'System.String.IndexOf()'. Aby w pełni dopasować elementy, użyj przeciążenia analogicznego 'System.String.Equals()', jak pokazano w innych odpowiedziach. – mklement0