8 viisi, kuidas loopida/iterata sõnastiku võtmeväärtuspaare C# keeles
Sõnastiku võtmeväärtuspaaride iteratsiooniks C# keeles kasuta järgmisi meetodeid
- Kasutades C# foreachloop
- Iteratsioon ainult C# sõnastiku võtmete üle
- Iteratsioon ainult C# sõnastiku väärtuste üle
- Kasutades DeconstructofKeyValuePair<TKey,TValue>c# keeles 7
- Kasutades DeconstructjadiscardsC# 7 keeles
- Deconstructvõtmeväärtuse paari kasutamine vanemates C# versioonides
- dictionary.ElementAt()funktsiooni ja- fortsükli kasutamine
- C# dictionary.AsParallel().ForAll()kasutamine
Käime läbi ühe näite, et seda paremini mõista
Olen loonud näidissõnastiku, kasutades C# for loop’i
Vaadake alljärgnevat C# sõnastikku
var dictionaryExample = new Dictionary<string, string>();
for (var i = 1; i <= 5; i++)
{
    dictionaryExample["key" + i] = "value" + i.ToString();
}
On this page
Lahendus 1: Kasutades C# foreach loop 
Kasutades C# foreach loop on lihtsaim ja sirgjoonelisim viis sõnastiku võtmeväärtuste üle itereerimiseks C# keeles.
foreach (var dictionary in dictionaryExample)
{
    Console.WriteLine("dictionary key is {0} and value is {1}", dictionary.Key, dictionary.Value);
}
//OUTPUT
dictionary key is key1 and value is value1
dictionary key is key2 and value is value2
dictionary key is key3 and value is value3
dictionary key is key4 and value is value4
dictionary key is key5 and value is value5
Muutuja dictionary ülaltoodud foreach tsüklis on muutuja KeyValuePair<TKey, TValue> tüüp
Me saame hõlpsasti ligi Key & Value omadustele KeyValuePair tüübile.
Lahendus 2: Iteratsioon ainult C# sõnastiku võtmete üle
Kui soovite loopida ainult sõnastiku võtmete üle, kasutage C# sõnastiku dictionary.Keys omadust.
foreach(var key in dictionaryExample.Keys)
{
    Console.WriteLine("dictionary Key is {0}",key);
}
Lahendus 3: Iteratsioon ainult C# sõnastiku väärtuste üle
Kui soovite itereerida ainult sõnastiku väärtuste üle, kasutage C# sõnastiku dictionary.Values omadust.
foreach (var value in dictionaryExample.Values)
{
    Console.WriteLine("dictionary Value is {0}", value);
}
Lahendus 4: Kasutades Deconstruct() of KeyValuePair<TKey,TValue> c#-s 7 
Dekonstruktorid on kasutusele võetud C# 7.0 versioonis.
Ja kui te kasutate .NET Core 2.0+ rakendust, siis on KeyValuePair<TKey, TValue> tüübil on Deconstruct() meetod.
public readonly struct KeyValuePair<TKey, TValue>
{
        private readonly TKey key;
        private readonly TValue value;
        private readonly int _dummyPrimitive;
        public TKey Key
        {
            get
            {
                throw null;
            }
        }
        public TValue Value
        {
            get
            {
                throw null;
            }
        }
        public KeyValuePair(TKey key, TValue value)
        {
            throw null;
        }
        [EditorBrowsable(EditorBrowsableState.Never)]
        public void Deconstruct(out TKey key, out TValue value)
        {
            throw null;
        }
        public override string ToString()
        {
            throw null;
        }
}
Sõnastiku võtmeväärtuspaarile juurdepääsuks kasutage Deconstruct() funktsiooni KeyValuePair tüübi .
foreach (var (key,value) in dictionaryExample)
{
    Console.WriteLine("dictionary key is {0} and value is {1}", key, value);
}
Lahendus 5: Deconstruct ja discards kasutamine C# 7-s 
Alates C# 7.0-st toetab C# loobumisi
Discards on paigutusmuutujad, mis on rakenduskoodis tahtlikult kasutamata
Sageli nimetatakse neid allkriipsu _ muutujateks.
Discards ei ole midagi muud kui määramata muutujad, neil ei ole väärtust.
Sõnastikus, kui tahame loopida ainult võtmeid, saame kasutada discard-muutujaid.
foreach (var (key, _) in dictionaryExample)
{
    Console.WriteLine($"dictionary key is {key}");
}
Samamoodi, kui soovite kasutada ainult sõnastiku väärtusi.
foreach (var (_, value) in dictionaryExample)
{
    Console.WriteLine($"dictionary value is {value}");
}
Lahendus 6: Deconstruct võtmeväärtuspaar vanemates C# versioonides 
Struktuuril KeyValuePair ei ole C# vanemates versioonides funktsiooni Deconstruct(). (C# 4.7.2 allpool)
Nii et kui soovite kasutada Deconstruct() võtmeväärtuspaaride loopimiseks, siis on olemas lahendus
foreach (var (key, value) in dictionaryExample.Select(x => (x.Key, x.Value)))
{
    Console.WriteLine("dictionary key is {0} and value is {1}", key, value);
}
Enamasti me seda meetodit ei kasuta, kuid seda on hea teada.
Lahendus 7: dictionary.ElementAt() funktsiooni ja for tsükli kasutamine 
Me võime kasutada lihtsat for loop’i, et itereerida üle sõnastiku võtmeväärtuspaaride.
Saame juurdepääsu KeyValuePair väärtustele sõnastiku indeksi abil, kasutades funktsiooni dictionary.ElementAt().
for(var i = 0; i < dictionaryExample.Count; i++)
{
    var keyValuePair = dictionaryExample.ElementAt(i);
    Console.WriteLine("dictionary key is {0} and value is {1}", keyValuePair.Key, keyValuePair.Value);
}
Jällegi ei ole see hea viis läbi sõnastiku loopida, sest ElementAt() funktsioonil on O(n) ja meil on for loop eespool, nii et ajakomplekssus on O(n^2)
Suurte sõnastike puhul on see mõju jõudlusele.
Kui soovite saada Dictionary võtmeväärtuspaaride indeksit, kasutage seda meetodit
Ma ei tea ühtegi reaalset kasutusjuhtumit, kus kasutatakse sõnastiku indeksit
Lahendus 8: C# kasutamine dictionary.AsParallel().ForAll() 
Kui teil on suur sõnastik, saame kasutada paralleelset keelega integreeritud päringut (LINQ) päringut, kasutades ParallelEnumerable.AsParallel laiendusmeetodit sõnastikule ja sooritades päringu meetodi ParallelEnumerable.ForAll abil.
Päring jaotab allika ülesanneteks, mida täidetakse asünkroonselt mitmes niidis
dictionaryExample.AsParallel().ForAll(keyValuePair => 
Console.WriteLine("dictionary key is {0} and value is {1}", keyValuePair.Key, keyValuePair.Value));
Parim viis sõnastiku loopimiseks C# keeles
Kuigi meil on mitu võimalust sõnastiku võtmeväärtuste üle iteratsiooniks, eelistame kasutada lihtsat foreach loop’i
Ja kui soovite loop ainult C# sõnastiku võtmed või väärtused kasutada dictionary.Keys või dictionary.Values asemel iterating kogu sõnastik