我的.NET應用程序與用戶集合一起工作。一個用戶對象包含用戶名,全名,域...在列表或詞典之間選擇
我不知道哪種類型的集合,我應該喜歡存儲用戶之間1)列表或2)字典,其中字典鍵是用戶名。
據我所知,當從用戶名中檢索用戶時,字典選項是最快的,但由於用戶名被引用兩次,可能會出現一致性錯誤。 (作爲字典鍵和用戶屬性)? 你能否解釋一下我從設計的角度有什麼不同?
我的.NET應用程序與用戶集合一起工作。一個用戶對象包含用戶名,全名,域...在列表或詞典之間選擇
我不知道哪種類型的集合,我應該喜歡存儲用戶之間1)列表或2)字典,其中字典鍵是用戶名。
據我所知,當從用戶名中檢索用戶時,字典選項是最快的,但由於用戶名被引用兩次,可能會出現一致性錯誤。 (作爲字典鍵和用戶屬性)? 你能否解釋一下我從設計的角度有什麼不同?
從設計的角度來看,最好的方法是創建一個自定義類UserCollection並隱藏實際的存儲細節。這使您能夠從列表更改爲字典而不影響其他代碼。假設它是一個額外的抽象層。
List和Dictionary之間的區別是概念性的。簡單的規則 - 如果項目是唯一的,並且您需要O(c)搜索複雜性,則使用Dictionary,否則使用List。
如果您通常通過UserName來查找用戶,那麼一定要使用Dictionary。使用列表你必須「foreach」你的方式到正確的! 至於一致性,我會實現一個Manager類,它將被允許操縱字典,從而強化一致性。 在許多會員引擎中,用戶名不能更改。這會幫助你的解決方案嗎?
這取決於要求,我認爲對於較小的列表,性能差異可以忽略不計,並且使用列表應該是考慮一致性的首選方法,並且您可以具有類似的查詢。
var user = Users.SingleOrDefault(user => user.username == 'username')
我更喜歡對象列表,特別是當數據存儲在數據庫中時。能夠查詢數據源並返回列表非常有幫助。數據順序訪問時(例如數據網格)也是首選。
我希望這會有所幫助。
您將無法在「詞典」中擁有兩個具有相同值的鍵。你沒有獨特的領域嗎? – davenewza 2012-07-30 14:50:53
請參閱此處:http://stackoverflow.com/questions/7914830/what-is-the-difference-between-list-and-dictionary-in-c-sharp – bitsmuggler 2012-07-30 14:51:45
請查閱常見問題解答:此問題無法專門回答這樣一個普遍的結局。 – Richard 2012-07-30 14:52:09