数组的扩展方法,创建一个静态类,将该方法加入到静态类中,在使用时,添加对该静态类名称空间的引用,就可使用该扩展方法。
public static int FindIndexOf<T>(this T[] source, T[] pattern, int start) { if(source==null||pattern==null) return -1; if (pattern.Length > source.Length - start) { //If the compare string is shorter than the test area it is not a match. return -1; } var next = new int[pattern.Length]; for (int k = 0; k < next.Length; k++) { next[k] = -1; } int i = start, j = 0, sLen = source.Length,plen=pattern.Length; BuildTable(pattern, ref next); while (i < sLen&&j<plen) { if (j == -1 || source[i].Equals(pattern[j])) { i++; j++; } else { j = next[j]; } if (j >= plen) { return i - plen; } } return -1; } static void BuildTable<T>(T[] pattern, ref int[] next) { int j = 0, k = -1; next[0] = -1; while (j < pattern.Length - 1) { if (-1 == k || pattern[j].Equals( pattern[k])) { j++; k++; next[j] = k; } else { k = next[k]; } } }
示例:
string[] source=new string[]{"aa","bb","cc","dd"}; string[] pattern=new string[]{"bb","cc"}; int index=source.FindIndexOf(pattern,0);