使用LINQ确定,该序列包含其他序列,顺序相同



样本:

a( 1,2,3,4,5

b( 2,3,4

a包含b.

.Intersect()不同,我需要保持序列顺序,即:

c( 4,3,2

a不包含c.

如果你谈论的是内存中比较简单的集合,你可以使用这样的东西(但要注意,集合会迭代多次!(:

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
}

既然这些都是字符串(假设你指的是字符,而不是数学字符串(,为什么不把字符串序列连接成扁平字符串并使用String.Contains

var flatA = string.Join(",", MyAs);
var flatB = string.Join(",", MyBs);
return flatA.Contains(flatB);

相关内容

  • 没有找到相关文章

最新更新