我找不到一个有效但简单的方法来检查列表是否包含另一个列表( 保留顺序) 。 它类似于字符串。 Contains( string) 功能 。
说我有四个集注:
A = [1, 2, 3, 4, 5]
B = [2, 3]
C = [5, 6, 7]
D = [3, 2, 4]
A. contains(B)
将是真实的,而 A. contains(C)
和 A. contains(D)
将是虚假的。
如果有帮助,我宁可不使用迭代器,但我无法想象一个有效的方法来做到这一点;以下的代码效率极低。
public static bool IsSequentiallyEqual<T>(this IEnumerable<T> lhs, IEnumerable<T> rhs)
{
return lhs.Zip(rhs, (a, b) => a.Equals(b)).All(isEqual => isEqual == true);
}
public static bool StartsWith<T>(this IEnumerable<T> haystack, IEnumerable<T> needle)
{
return haystack.Take(needle.Count()).IsSequentiallyEqual(needle);
}
public static bool Contains<T>(this IEnumerable<T> haystack, IEnumerable<T> needle)
{
var result = list.SkipWhile((ele, index) => haystack.Skip(index).StartsWith(needle));
return result.Count() >= needle.Count();
}