Я пишу дуплексный детектор файлов. Чтобы определить, дублируются ли два файла, я вычисляю контрольную сумму CRC32. Поскольку это может быть дорогостоящей операцией, я хочу только вычислить контрольные суммы для файлов, у которых есть другой файл с соответствующим размером. Я отсортировал список файлов по размеру и прокручиваю цикл, чтобы сравнить каждый элемент с теми, что указаны выше и ниже. К сожалению, есть проблема в начале и конце, так как не будет предыдущего или следующего файла, соответственно. Я могу исправить это, используя инструкции if, но он чувствует себя неуклюжим. Вот мой код:Сравнить соседние элементы списка
public void GetCRCs(List<DupInfo> dupInfos)
{
var crc = new Crc32();
for (int i = 0; i < dupInfos.Count(); i++)
{
if (dupInfos[i].Size == dupInfos[i - 1].Size || dupInfos[i].Size == dupInfos[i + 1].Size)
{
dupInfos[i].CheckSum = crc.ComputeChecksum(File.ReadAllBytes(dupInfos[i].FullName));
}
}
}
Мой вопрос:
Как я могу сравнить каждую запись для своих соседей без отказа от ошибки ограничивающих?
Должен ли я использовать цикл для этого, или есть лучшая LINQ или другая функция?
Примечание: я не включил остальную часть своего кода, чтобы избежать беспорядка. Если вы хотите это увидеть, я могу включить его.
Вместо начала с 0 начинается с 1 и заканчивается на 'dupInfos.Count() -1' – 3dd
Другая проблема, которую вы, возможно, не рассмотрели ... Что делать, если есть 4 файла с одинаковым размером, а первый и четвертый файлы идентичны. Ваш код здесь будет пропустить, потому что между ними находятся другие неидентичные файлы с одинаковым размером. – DiscipleMichael
Если вы не уверены, что найдете все совпадения, вам нужно выполнить сравнение для каждой пары в каждой группе размеров файлов, а не только выше и ниже. – DiscipleMichael