나는에 6 개의 항목이 시간 순서대로 표시되어 있습니다. 목록이 IEnumerable<Object> b
이고 3 항목이 시간 순서대로 있는지 테스트하고 싶습니다.리스트에 목록이 들어 있습니다.
IEnumerable<Object> a
항목 값 A, B, C, D, F, G
IEnumerable<Object> b
항목 값 : B, D,
나는에 6 개의 항목이 시간 순서대로 표시되어 있습니다. 목록이 IEnumerable<Object> b
이고 3 항목이 시간 순서대로 있는지 테스트하고 싶습니다.리스트에 목록이 들어 있습니다.
IEnumerable<Object> a
항목 값 A, B, C, D, F, G
IEnumerable<Object> b
항목 값 : B, D,
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);
이 메소드의 이름을 용서해주세요 ...
다음 사용할 수 있습니다 모두 a
과에
bool AContainsEverythingInBInTheSameOrder =
a.Intersect(b).SequenceEquals(b);
a.Intersect(b)
반환 모든 b
, 과 같은 순서로 표시됩니다. a
.
그래서 당신은 단지 b'가 A''에 또한'에 그 모든 것을 확인하려면, 또는 당신은 그들이 될 것이라고 _know_ 할 것을 확인 하시겠습니까 그들은 올바른 순서로 존재합니까? – Rawling
연대순 대신 알파벳순을 의미합니까? –
@Rawling, 예 목록 a에 목록 b의 모든 항목이 같은 순서로 포함되어 있는지 확인하고 싶습니다. – eugeneK