這個問題幾乎說明了一切。我有一個NameValueCollection,其中所有值都以空值開始,然後隨着事物的移動而設置爲特定值。每次設置值時,我都需要找到值爲!= null的集合中的項目數。目前我正在遍歷集合並計算非空值,但我想查找是否有辦法通過lambda表達式來實現它更乾淨。有沒有辦法使用lambda表達式在NameValueCollection中找到非空值
回答
NameValueCollection
沒有實現IEnumerable<T>
但是你可以使用OfType
法Keys
物業把鑰匙進入IEnumerable<string>
和使用Count
方法:
int nullCount = collection.Keys.OfType<string>().Count(x => collection[x] != null);
我真的好奇誰是downvoting所有的答案,並沒有提供理由......反正 - OfType VS演員 - 我認爲盲演會更適用,因爲我們知道所有的鍵總是字符串。微小的性能差異,但它更多的是語義提醒。但當然,沒什麼大不了的。我只是覺得不得不咆哮有關downvotes;) – quetzalcoatl 2014-10-30 20:59:26
你的意思是這樣的:
NameValueCollection collection = ...; // init as appropriate
int countOfNull = collection.Cast<string>().Where(key => collection[key] != null).Count;
?
在這種情況下你如何發現自己並不十分清楚。如果你可以使用更合適的數據結構,那麼知道已經填充了多少個密鑰是一種立即可用的值(例如,在集合旁邊保留一個計數器,或者僅當添加密鑰/值對時才更好值等)
我同意當前的集合類型是不合適的,但這是那些返回並將其更改爲字典或更合適的內容比當前情況的不便更加努力。 – Matt 2014-10-30 21:36:05
- 1. 有沒有辦法指定一個「空的」C#lambda表達式?
- 2. 有沒有辦法找到正則表達式的逆
- 3. NameValueCollection鍵沒有值
- 4. 有沒有辦法在wpf的lineseries圖表中有空值的空值?
- 5. 有沒有辦法在正則表達式中使用JavaScript中的非正式匹配?
- 6. 有沒有辦法在C#中執行SSRS表達式?
- 7. 有沒有辦法在RequestContext.getCurrentInstance()。update(「anyExpression」)中添加表達式?
- 8. 有沒有辦法在xpath表達式中比較時間?
- 9. (有沒有)在數值表達式中使用隱式轉換?
- 10. 當使用表達式時,有沒有辦法...不能取代以前的值?
- 11. 有沒有什麼辦法可以在c#中使用正則表達式?
- 12. 有沒有更容易結合表達式和lambda表達式的方法?
- 13. 在Lambda表達式(爪哇),如何使用沒有參數的表達式?
- 14. 沒有lambda表達式的python排序
- 15. 的java lambda表達式沒有編譯
- 16. C#:有沒有辦法使用lambda表達式來設置集合中的對象的屬性?
- 17. 獲取有使用C#lambda表達式
- 18. 在另一個lambda表達式中使用lambda表達式
- 19. 有沒有辦法在IF中寫入lambda表達式並捕獲所有內容?
- 20. 正則表達式沒有找到
- 21. 有沒有辦法在AWS Lambda中獲得Cognito用戶名?
- 22. 在lambda表達式中使用的Lambda屬性值選擇器
- 23. 有沒有辦法使用Linq到Oracle
- 24. 有沒有辦法在正則表達式(java)中使用\ p {Punct},但沒有「(」,「)」字符?
- 25. vi:有沒有辦法來處理正則表達式匹配?
- 26. emacs lisp有沒有辦法改善這個正則表達式
- 27. 有沒有辦法讓JSLint滿意這個正則表達式?
- 28. 使用lambda表達式將範圍添加到現有列表
- 29. 有沒有辦法在不在當前範圍內的lambda中使用變量?
- 30. 有沒有辦法在CSS2中表達CSS3否定僞類?
這會幫助你? 'Collection.Count((i)=> i!= null?1:0)' – Icepickle 2014-10-30 20:49:33
您不應該通過集合進行線性搜索來首先對項目進行計數。這是一個特別低效的算法。爲什麼你首先有一堆空條目? – Servy 2014-10-30 20:50:37
'每次設置一個值/計數值的數量!= null' - 爲什麼你不緩存該值?如果您知道集合從0開始,那麼'每次設置一個值'時,檢查設置的內容,並根據新值是否爲空來執行+ = 1或 - = 1。通過這種方式,您將始終擁有「value!= null」統計數據,並且不需要每次都掃描整個集合。 – quetzalcoatl 2014-10-30 20:51:24