列表中包含的列表检查
问题描述:
我有一个IEnumerable<Object> a
6个项目按时间顺序在它。 我想测试是否列表IEnumerable<Object> b
与3项按时间顺序。列表中包含的列表检查
IEnumerable<Object> a
项目值:A,B,C,d,F,G
IEnumerable<Object> b
项目值:B,d,F
是否有可能与LINQ做什么?
答
Rawling和Tim的单线程方法非常好,但它有一个小问题: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;
}
}
这将迭代两个序列只有一次,整体更轻量级。你会这样称呼它:
b.IsContainedWithinInOrder(a);
请原谅方法的名称...
所以你要检查一切'B'也是'了',或者你_know_,他们将和只想检查他们是在正确的顺序? – Rawling
你的意思是按字母排序而不是按时间顺序排列? –
@Rawling,是我想检查列表a是否包含列表b中的所有项目,顺序相同 – eugeneK