样品:
a)1,2,3,4,5
b)2,3,4
a包含b。
与.Intersect()
不同,我需要保持序列顺序,即:
a不包含c。
答案 0 :(得分:3)
如果你在谈论内存中的比较简单的集合,你可以使用这样的东西(但要注意,集合会被多次迭代!):
public static bool Contains<T>(this IEnumerable<T> data, IEnumerable<T> otherData) {
var dataLength = data.Count();
var otherDataLength = otherData.Count();
if (dataLength < otherDataLength)
return false;
return Enumerable.Range(0, dataLength - otherDataLength + 1)
.Any(skip => data.Skip(skip).Take(otherDataLength).SequenceEqual(otherData));
}
并像这样使用它:
var a1 = new List<int> { 1, 2, 3, 4, 5 };
var a2 = new List<int> { 2, 3, 4};
var a3 = new List<int> { 4, 3, 2};
if (a1.Contains(a2)) {
// is hit
}
if (a1.Contains(a3)) {
// is not hit
}
答案 1 :(得分:2)
由于这些是字符串(并且假设您指的是字符,而不是数学,字符串),为什么不将字符串Sequences连接成扁平字符串并使用String.Contains
var flatA = string.Join(",", MyAs);
var flatB = string.Join(",", MyBs);
return flatA.Contains(flatB);