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#
foreach
loop - Iteratsioon ainult C# sõnastiku võtmete üle
- Iteratsioon ainult C# sõnastiku väärtuste üle
- Kasutades
Deconstruct
ofKeyValuePair<TKey,TValue>
c# keeles 7 - Kasutades
Deconstruct
jadiscards
C# 7 keeles Deconstruct
võtmeväärtuse paari kasutamine vanemates C# versioonidesdictionary.ElementAt()
funktsiooni jafor
tsü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