扩展方法的应用
/// <summary>
/// 扩展类
/// </summary>
static class Extensions
{
/// <summary>
/// 检索子集合在数据源的所有索引
/// </summary>
/// <param name="x">数据源集合</param>
/// <param name="y">需要检索的数组集合</param>
/// <returns>检索到的所有索引值</returns>
public static int[] FindIndex<T>(this IList<T> x, IList<T> y)
{
var index = Enumerable.Range(0, x.Count - y.Count + 1);
for (int i = 0; i < y.Count; i++)
{
index = index.Where(n => x[n + i].Equals(y[i])).ToArray();
}
return index.ToArray();
}
/// <summary>
/// 检索子集合在数据源的第一个索引
/// 检索到的第一个索引值,未检索到返回-1
/// </summary>
/// <param name="x">数据源集合</param>
/// <param name="y">需要检索的数组集合</param>
/// <returns>检索到的第一个索引值,未检索到返回-1</returns>
public static int FindFirstIndex<T>(this IList<T> x, IList<T> y)
{
var arr = x.FindIndex(y);
if (arr.Length == 0) return -1;
return arr[0];
}
/// <summary>
/// 检索子集合在数据源的最后一个索引
/// </summary>
/// <param name="x">数据源集合</param>
/// <param name="y">需要检索的数组集合</param>
/// <returns>检索到的最后一个索引值,未检索到返回-1</returns>
public static int FindLastIndex<T>(this IList<T> x, IList<T> y)
{
var arr = x.FindIndex(y);
if (arr.Length == 0) return -1;
return arr[arr.Length - 1];
}
}