我在這個問題上看到LINQy way to check if any objects in a collection have the same property value有一個請求說如何使用LINQ來查看屬性是否與集合匹配。但是,這是做這件事的最合理的過程嗎?我將部署需要一定量資源管理的事物,並且我希望應用程序能夠儘可能快速地響應,而不會使代碼在其他人或我以後再回來時非常難以破譯。檢查一個集合中是否存在一個對象(T)
1
A
回答
2
然而,這是最快的合理的過程來做到這一點?
我猜的快捷方式(也許是最快的方法)來做到這一點可能是添加的所有對象到詞典或HashSet的,使用屬性作爲主鍵字段:像HashSet的方法。添加有一個返回代碼告訴你這個屬性值是否已經被添加。例如:
static bool containsDuplicate(Container<Foo> fooCollection)
{
//create the hash set
HashSet<Bar> hashSet = new HashSet<Bar>();
//for each object to be tested
foreach (Foo foo in fooCollection)
{
//get the interesting object property
Bar propertyValue = fooCollection.bar;
//see whather we've already seen this property value
if (!hashSet.Add(propertyValue))
{
//duplicate detected
return true;
}
}
//no duplicate detected
return false;
}
1
LINQ幾乎從來都不是最快的方式(根據原始執行時間)做任何事情。
雖然它通常「足夠快」。當你有一個單元測試的工作應用程序,你可以分析它,看看你是否需要優化。
「我們應該忘記小效率,大約97%的時間:過早優化是萬惡之源。」 -Donald Knuth
0
確實,LINQ會正常工作。當然,如果您知道可以在特定情況下優化情況,那麼您可以隨時爲更具體的類型編寫自己的LINQ擴展方法。由於類型爲更具特異性,因此應優先使用您自己的方法,而不是默認的Enumerable
之一。這是不錯的; -p
0
這實際上取決於您的收集數據量和執行此操作的頻率。屬性的Linq搜索必須讀取集合中的每個項目/屬性。
如果你的集合中只有10個物品,而且這個操作每秒只能執行一次,那麼只有一次掃描才能找到物品屬性的速度相當快。
如果您的集合中有1,000萬個物品,那麼只需轉發或需要執行此類操作100次,那麼您可能需要此屬性的一些索引。
如果事實證明你需要索引這個,我會建議把這個邏輯封裝在一個對象中。因此,例如添加一個Item將它添加到主集合中,並在一個散列集合中添加一個屬性索引器。
相關問題
- 1. 判斷一個對象是否存在於一個集合中
- 2. 檢查一個對象是否在Groovy集合中
- 3. NUnit聲明一個集合,檢查是否存在一個值
- 4. 可以檢查一個集合或子集合是否存在?
- 5. 檢查是否在一個jQuery集合
- 6. ICollection - 檢查一個集合是否包含對象
- 7. 在刪除它之前,我應該檢查一個對象是否存在於一個集合中?
- 8. 檢查是否是一個對象
- 9. 如何檢查一個集合是否已經存在於ArangoDB
- 10. Node.js - Mongoose - 檢查一個集合是否存在
- 11. 檢查一個對象是否存在於JSON中
- 12. 如何檢查一個對象是否在CPU緩存中?
- 13. 如何檢查一個GroupBox中是否存在對象 - VB.NET
- 14. 檢查一個對象是否爲空
- 15. 如何檢查一個對象是否存在於一個NSMutableArray中
- 16. in_array如何檢查一個對象是否在一個對象數組中?
- 17. Laravel檢查一個集合是否包含一個外鍵
- 18. 檢查一個集合是否至少包含一個文檔
- 19. Unity檢查一個對象是否在一個位置相撞
- 20. 如何檢查一個集合中某個_id的一部分是否出現在另一個集合中
- 21. 如何檢查對象是否在Domain對象的集合中?
- 22. 如何檢查一個對象是否是一個字符串?
- 23. xcode檢查一個NSArray是否存在幷包含對象?
- 24. node js,mongodb:檢查一個對象是否已經存在
- 25. 檢查一個對象是否是一個特定的類,並符合協議
- 26. 如何檢查如果對象是一個集合
- 27. 檢查一個元素是否在jQuery集合中
- 28. 檢查一個值是否在與LINQ的集合中
- 29. 在一個或另一個集合中有對象,但不是兩個對象?
- 30. 搜索一個列表來檢查一個子對象是否已經存在