1) nếu bạn muốn tìm kiếm một lần duy nhất và muốn giữ lại mảng nguồn, bạn có thể sử dụng này:
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) nếu bạn sẽ tìm kiếm nhiều lần sẽ tốt hơn nếu sử dụng điều này:
public static void example1()
{
string[] myarr = {"good", "Hello", "this", "new"};
var str = "new";
var res = Array.IndexOf(Array.ConvertAll(myarr, ToStringlowerCase), str.ToLowerInvariant());
}
3) câu trả lời ở trên là không chính xác:
string array[] = {"hello", "hi", "bye" , "welcome" , "hell"}
Int Indexofary = Array.FindIndex(array, t => t.IndexOf("hell", StringComparison.InvariantCultureIgnoreCase) >=0);
sẽ không làm việc ở tất cả, vì nó tìm kiếm không phải là chuỗi, nhưng chuỗi con.
Thuật toán lặp lại các từ trong mảng, khi từ 1 "hello" được thực hiện, thuật toán sẽ tìm chỉ mục 'địa ngục' và chỉ mục này là 1. 1> sau đó 0 và thuật toán sẽ kết thúc mà không chuyển sang các từ khác.
Nếu bạn không muốn tìm kiếm chất nền nhưng muốn tìm kiếm chuỗi, thì cần phải cố định algorythm. Thuật toán này có thể được cố định bằng cách thêm kiểm tra xem chuỗi con có bắt đầu từ 1st char t.IndexOf(str, StringComparison.InvariantCultureIgnoreCase) == 0
và độ dài của các từ bằng str.Length == t.Length
hay không. Cố định:
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);
}
Lưu ý rằng câu trả lời này tìm kiếm cho một _substring_ của chuỗi tham chiếu trong mỗi phần tử của mảng đầu vào được liệt kê bởi 'Array.FindIndex()', do sử dụng 'System.String.IndexOf()'. Để khớp các phần tử đầy đủ, hãy sử dụng quá tải tương tự 'System.String.Equals()', như được hiển thị trong các câu trả lời khác. – mklement0