簡體   English   中英

在 C# 字典中設置所有值的最佳方法是什么<string,bool> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM