[英]List contains in List check
我有一個IEnumerable<Object> a
其中包含6個按時間順序排列的項目。 我想測試是否按時間順序列出IEnumerable<Object> b
和3個項目。
IEnumerable<Object> a
項目值:a,b,c,d,f,g
IEnumerable<Object> b
項值:b,d,f
是否可以使用LINQ完成?
您可以使用以下內容:
bool AContainsEverythingInBInTheSameOrder =
a.Intersect(b).SequenceEquals(b);
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;
}
}
這將只迭代兩個序列一次,總體上更輕量級。 你會這樣稱呼它:
b.IsContainedWithinInOrder(a);
請原諒方法的名稱......
我假設您有兩個列表,並且您想要檢查第二個列表項是否與第一個列表中的相同項目具有相同的順序。
也許:
var allSameOrder = list1.Intersect(list2).SequenceEqual(list2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.