我正在開發一個能夠找到文件夾之間的文件差異的程序。我製作了一個遍歷給定文件夾的文件夾結構的方法,併爲每個子文件夾構建一棵樹。每個節點都包含一個文件列表,即該文件夾中的文件。每個節點都有一定數量的子項,它們對應於該文件夾中的文件夾。獲得區別的最快方法列表<object>
現在的問題是要找到一個樹中存在的文件,而不是另一個。我有一個方法:「私人列表差異(節點索引1,節點索引2)」,應該這樣做。但問題是我比較樹木的方式。比較兩棵樹需要大量的時間 - 當每個輸入節點包含大約70,000個文件時,Diff方法大約需要3-5分鐘才能完成。
目前,我正在做這種方式:
private List<MyFile> Diff(Node index1, Node index2)
{
List<MyFile> DifferentFiles = new List<MyFile>();
List<MyFile> Index1Files = FindFiles(index1);
List<MyFile> Index2Files = FindFiles(index2);
List<MyFile> JoinedList = new List<MyFile>();
JoinedList.AddRange(Index1Files);
JoinedList.AddRange(Index2Files);
List<MyFile> JoinedListCopy = new List<MyFile>();
JoinedListCopy.AddRange(JoinedList);
List<string> ChecksumList = new List<string>();
foreach (MyFile m in JoinedList)
{
if (ChecksumList.Contains(m.Checksum))
{
JoinedListCopy.RemoveAll(x => x.Checksum == m.Checksum);
}
else
{
ChecksumList.Add(m.Checksum);
}
}
return JoinedListCopy;
}
和節點類看起來是這樣的:
class Node
{
private string _Dir;
private Node _Parent;
private List<Node> _Children;
private List<MyFile> _Files;
}
您可以(或者讓您)在比較之前對條目進行排序嗎? IIRC,排序集合在搜索方面通常會提供更好的性能。 – 2013-03-14 19:42:37
@KennethK。基於散列的結構提供比排序的集合更快的搜索。 – Servy 2013-03-14 19:45:25
@Servy同意。但是正在使用一個List。據我所知,目前還沒有一個哈希表正在進行中。爲了散列,不需要使用新的數據結構(例如'Dictionary'或'HashTable')? *編輯我想你可以爲現有列表編寫一個哈希函數,因爲'List'是可索引的。 – 2013-03-14 20:10:59