【发布时间】:2018-10-31 16:04:27
【问题描述】:
我有 2 个列表。一个是文件夹中所有文件的列表,另一个是数据库中的列表。我必须比较这些列表,我想知道是否有更好的方法来做到这一点,因为我认为性能会受到影响。以下是我的一些方法:
for(int i=0; i < docListFallback.Count; i++ )
{
if (docListFallback[i].id == metadataItem.UniqueID.ToString())
{
if (docListFallback[i].modifiedDate < metadataItem.Geaendert)
{
isDocumentMissing = true;
downloadFile = isDocumentMissing;
}
docListFallback.Remove(docListFallback[i]);
break;
}
}
还有这个
for (int i = 0; i < docListModDate.Count; i++)
{
if (docListModDate[i].id == metadataItem.UniqueID.ToString())
{
if (docListModDate[i].modifiedDate != metadataItem.Geaendert)
{
await _spManager.fileStorage.modifyDate(metadataItem.Geaendert, docListModDate[i].id);
}
docListModDate.Remove(docListModDate[i]);
break;
}
}
还有这个
for(int i = 0; i < cleanupDocList.Count; i++)
{
for(int j = 0; j < existingDocuments.Count; j++)
{
if(cleanupDocList[i].id == existingDocuments[j].UniqueID.ToString())
{
addToDelList = false;
break;
}
else
{
addToDelList = true;
}
}
if(addToDelList)
{
toDelete.Add(cleanupDocList[i].filename);
}
}
foreach(string fileToDelete in toDelete)
{
await _spManager.fileStorage.DeleteFileAsync(fileToDelete);
}
【问题讨论】:
-
拥有一个排序列表会带来很多优化选项。
-
你需要什么作为输出,一个布尔值表示列表相等或仅匹配项的列表?
-
您应该问自己的第一个问题是“它必须有多快?”第二个是“它有多快?”也许您根本不需要更改任何内容(尽管@Martin 的回答也使您的代码更易于阅读,因此总体而言也不错)。
标签: c# performance for-loop foreach uwp