[英]What's the best way to set all values in a C# Dictionary<string,bool>?
在 C# 字典中設置所有值的最佳方法是什么?
這是我現在正在做的事情,但我確信有更好/更清潔的方法來做到這一點:
Dictionary<string,bool> dict = GetDictionary();
var keys = dict.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{
dict[keys[i]] = false;
}
我用 foreach 嘗試了其他一些方法,但我有錯誤。
這是一個合理的方法,雖然我更喜歡:
foreach (var key in dict.Keys.ToList())
{
dict[key] = false;
}
對ToList()
的調用使這項工作起作用,因為它正在拉出並(臨時)保存鍵列表,因此迭代有效。
單線解決方案:
dict = dict.ToDictionary(p => p.Key, p => false);
如果您不使用三態 bool,則可以使用HashSet<string>
並調用Clear()
將值設置為“false”。
我不確定這是否是最好的方法,但我正在尋找一條線上的東西,這對我有用
mydict.Keys.ToList().ForEach(k => mydict[k] = false);
我描述了 Billy 和 Reed 的解決方案之間的差異。 Polaris878,注意結果並記住過早的優化是萬惡之源;-)
我在 VB 中重寫了解決方案(因為我目前正在使用該語言進行編程)並使用 int 鍵(為簡單起見),否則它是完全相同的代碼。 我使用包含 1000 萬個條目的字典運行代碼,每個條目的值為“true”。
比利巫醫的原始解決方案:
Dim keys = dict.Keys.ToList
For i = 0 To keys.Count - 1
dict(keys(i)) = False
Next
經過的毫秒數:415
里德科普西的解決方案:
For Each key In dict.Keys.ToList
dict(key) = False
Next
經過的毫秒數:395
所以在那種情況下 foreach 實際上更快。
從 .NET5 開始(參見github ):
foreach (var pair in dict)
dict[pair.Key] += 1;
對於 .NET5 之前:
foreach (var key in dict.Keys.ToList())
dict[key] += 1;
您可以直接拉出 ToList() 並直接遍歷字典項
Dictionary<string, bool> dict = GetDictionary();
foreach (var pair in dict)
{
dict[pair.Key] = false;
}
按照你現在的方式去做...... foreach 很慢。 foreach 可能更干凈,但是使用它會降低性能。
編輯:
http://www.codeproject.com/KB/cs/foreach.aspx
http://www.madprops.org/blog/for-vs-foreach-performance/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.