Je n'arrive pas à trouver un moyen efficace mais simple de vérifier si une liste contient une autre liste (ordre de conservation). C'est analogue à la chaîne. Contient (fonctionnalité).La liste LINQ contient une autre liste (contiguë)
Dire que j'ai quatre collections de ints:
A = [1, 2, 3, 4, 5]
B = [2, 3]
C = [5, 6, 7]
D = [3, 2, 4]
A.Contains(B)
serait vrai, alors que A.Contains(C)
et A.Contains(D)
serait faux.
Je préfère ne pas utiliser les itérateurs si cela peut être utile, mais je ne peux pas imaginer un moyen efficace de le faire; le code suivant est extrêmement inefficace.
public static bool IsSequentiallyEqual<T>(this IEnumerable<T> lhs, IEnumerable<T> rhs)
{
return lhs.Zip(rhs, (a, b) => a.Equals(b)).All(isEqual => isEqual == true);
}
public static bool StartsWith<T>(this IEnumerable<T> haystack, IEnumerable<T> needle)
{
return haystack.Take(needle.Count()).IsSequentiallyEqual(needle);
}
public static bool Contains<T>(this IEnumerable<T> haystack, IEnumerable<T> needle)
{
var result = list.SkipWhile((ele, index) => haystack.Skip(index).StartsWith(needle));
return result.Count() >= needle.Count();
}
Combien d'articles aurez-vous? (C'est-à-dire, l'efficacité est-elle cruciale, ou voulez-vous juste quelque chose qui n'est pas très inefficace?) – Ryan
Il ne suffira pas d'EXIGER l'efficacité, mais ce serait bien – hehewaffles
http://stackoverflow.com/questions/3529727/comment-trouver-index-de-sous-liste-dans-liste – Ryan