static List <List <string> > FindDuplicateFilesInHashedFilesList(IEnumerable <HashedFilesList.HashedFilePathPair> list) { using (var hashesList = new SimpleDiskStoredStringList()) { using (var duplicateHashesList = new SimpleDiskStoredStringList()) { foreach (var pair in list) { if (hashesList.Contains(pair.Hash)) { if (!duplicateHashesList.Contains(pair.Hash)) { duplicateHashesList.Add(pair.Hash); } } else { hashesList.Add(pair.Hash); } } var duplicateFilesLists = new List <List <string> >(); foreach (var duplicateHash in duplicateHashesList) { var duplicatePaths = new List <string>(); duplicatePaths.AddRange(list.Where((pair) => pair.Hash == duplicateHash).Select(pair => pair.FullPath)); duplicateFilesLists.Add(duplicatePaths); } return(duplicateFilesLists); } } }