您可以使用以下内容:
bool AContainsEverythingInBInTheSameOrder =
a.Intersect(b).SequenceEquals(b);
Run Code Online (Sandbox Code Playgroud)
a.Intersect(b)返回的一切,是在既a和b,在它出现在相同的顺序a.
罗林和蒂姆的单线方法非常好,但它有一个小问题:b迭代两次.
如果这对您来说是个问题,您可以使用基于迭代器的方法.这可以创建为扩展方法:
public static bool IsContainedWithinInOrder<T>(this IEnumerable<T> values,
IEnumerable<T> reference)
{
using(var iterator = reference.GetEnumerator())
{
foreach(var item in values)
{
do
{
if(!iterator.MoveNext())
return false;
} while(!Equals(iterator.Current, item));
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这将只迭代两个序列一次,总体上更轻量级.你会这样称呼它:
b.IsContainedWithinInOrder(a);
Run Code Online (Sandbox Code Playgroud)
请原谅方法的名称......
我假设您有两个列表,并且您想要检查第二个列表项是否与第一个列表中的相同项目具有相同的顺序.
也许:
var allSameOrder = list1.Intersect(list2).SequenceEqual(list2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |