Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
400 views
in Technique[技术] by (71.8m points)

c# - Check if one list contains all items from another list in order

How can I determine if List A contains all of the elements from List B in the same order?

List A can have additional elements that List B does not have, but must contain all elements of List B in the order that List B has them.


Example 1 (List A ending with ..., 4, 0, 6):

List A:    List B:
5          2
9          3
2          4
3
4
0
6

This should return True.


Example 2 (List A ending with ..., 0, 4, 6):

List A:    List B:
5          2
9          3
2          4
3
0
4
6

This should return False.


I found this answer from JonSkeet to see if List A contains all elements from List B however, that does not require them to be in the same order.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This takes each part of ListA and compares it with ListB with SequenceEqual:

bool containsSameSequence = ListA
    .Where((item, index) => index <= ListA.Count - ListB.Count)
    .Select((item, index) => ListA.Skip(index).Take(ListB.Count))
    .Any(part => part.SequenceEqual(ListB));

Demo

It returns true on the first matching sequence.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...