Если вы просто хотите сравнить для совпадающей последовательности символов между списками:
bool sameCharacters = Enumerable.SequenceEqual(firstList.SelectMany(x => x),
secondList.SelectMany(x => x));
Это приведет к true
, то есть для следующих двух списков - их последовательности символов совпадают ("010111123"
для обоих) их отдельные строковые записи не:
List<string> firstList = new List<string> {"010", "111", "123" };
List<string> secondList = new List<string> {"010", "11", "1123" };
Редактировать в ответ на комментарии:
Для подстановочного совпадения вы можете использовать Zip()
и сравнитьдля каждого символа возвращайте значение true, если они совпадают, основываясь на условиях подстановочных знаков, а затем просто убедитесь, что каждый элемент в сжатой последовательности имеет вид true
.
var isWildCardMatch = firstList.SelectMany (x => x)Zip (secondList.SelectMany (x => x), (a, b) => {if (a == b || a == '' || b == '') вернуть true;return false;
}).All( x=> x);
При подходе пересекаются границы ввода строк, что может привести к ложным совпадениям - здесь лучший подход:
bool isWildCardMatch = firstList.Zip(secondList, (x, y) =>
{
var matchWord = y.Select((c, i) => c == '*' ? x[i] : c);
return matchWord.SequenceEqual(x);
}).All(x => x);