Я имею в виду хороший способ, чтобы найти различия в двух спискахНахождение различия в двух списках
здесь проблема:
Два списка есть несколько строк, где первые 3 цифры/символы (* разделителями) представляют уникальный ключ (за ним следует текст String = "key1 * key2 * key3 * text").
здесь строка Пример:
AA1*1D*4*The quick brown fox*****CC*3456321234543~
где "* AA1 * 1D * 4 *" является уникальным ключом
List1: "index1 * index2 * index3", «index2 * index2 * index3" , "index3 * index2 * index3"
List2: "index2 * index2 * index3", "index1 * index2 * index3", "index3 * index2 * index3", "index4 * index2 * index3"
Мне нужно сопоставить индексы в обоих списках и сравнить их.
Если все 3 индексы от 1 списка матча 3 индексов из другого списка, мне нужно отслеживать обе строки записи в новом списке
Если есть множество индексов в одном списке, что дон» t появляется в другом, мне нужно отслеживать одну сторону и сохранять пустую запись на другой стороне. (# 4 в приведенном выше примере)
возвращают список
Это то, что я сделал до сих пор, но я вроде изо всех сил здесь:
List<String> Base = baseListCopy.Except(resultListCopy, StringComparer.InvariantCultureIgnoreCase).ToList(); //Keep unique values(keep differences in lists)
List<String> Result = resultListCopy.Except(baseListCopy, StringComparer.InvariantCultureIgnoreCase).ToList(); //Keep unique values (keep differences in lists)
List<String[]> blocksComparison = new List<String[]>(); //we container for non-matching blocks; so we could output them later
//if both reports have same amount of blocks
if ((Result.Count > 0 || Base.Count > 0) && (Result.Count == Base.Count))
{
foreach (String S in Result)
{
String[] sArr = S.Split('*');
foreach (String B in Base)
{
String[] bArr = B.Split('*');
if (sArr[0].Equals(bArr[0]) && sArr[1].Equals(bArr[1]) && sArr[2].Equals(bArr[2]) && sArr[3].Equals(bArr[3]))
{
String[] NA = new String[2]; //keep results
NA[0] = B; //[0] for base
NA[1] = S; //[1] for result
blocksComparison.Add(NA);
break;
}
}
}
}
могли бы вы предложить хороший алгоритм для этого процесса?
Thank you
Я хотел бы сказать, что с помощью составной строковый ключ вместо пользовательского класса для различных индексов является источник вашей проблемы. – Oded
Если я прав, может ли эта проблема быть разбита на -> найти пересечение двух списков? Я спрашиваю, почему порядок индекса имеет значение? – noMAD