2009-01-03 38 views

回答

9

Array.IndexOf:

bool contains = Array.IndexOf(arr, value) >= 0; 

或者只是使用LINQ:

bool contains = arr.Contains(value); 

LINQ應該是 「不夠快」 對於大多數的目的。

1

如果絕對速度值得關注,我相當肯定for環路更快。即,

for (int i = 0; i < arr.Length; ++i) 
    if (arr[i] == value) return true; 
return false; 
2

除非你知道String數組由一個特定的順序,你可以做最有效的事排序是線性的算法(即,直到找到一個匹配或數組的結尾每個字符串比較數組中。

如果數組排序的二進制搜索的速度要快得多。

另一種方式來優化算法(雖然複雜不減少)是向量化的字符串比較。

7

如果你只檢查一次tim e,使用Array.IndexOf或像Marc提出的LINQ Contains方法。如果您多次檢查,首先將字符串數組轉換爲HashSet<string>可能會更快。

+0

HashSet的好處; +1 ;-p – 2009-01-03 15:56:15

1

如果您搜索一次或兩次,請使用線性搜索或IndexOf。

如果您搜索了幾次,請將字符串放入HashSet中。

如果您以時間關鍵的方式搜索大量時間,請使用HashSet並自行管理其桶數。

1

可以使用IEnumerable.Foreach自定義擴展

public static class CollectionExtensions 
{ 
    public static void ForEach<T>(this IEnumerable list, Action<T> action) 
    { 
     foreach (T item in list) 
     { 
      action(item); 
     } 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     String[] list = new String[] { "Word1", "Word2", "Word3" }; 

     list.ForEach<String>(p => Console.WriteLine(p)); 
     list.ForEach(delegate(String p) { Console.WriteLine(p); }); 
    } 
} 

希望這有助於公司。

相關問題