8 veidi, kā veidot cilpas/iterēt vārdnīcas atslēgu/vērtību pārus C# valodā
Lai iterētu vārdnīcas atslēgu un vērtību pārus C#, izmantojiet šādas metodes
- Izmantojot C#
foreach
cilpu - Iterēt tikai pār C# vārdnīcas atslēgām
- Iterēt tikai pār C# vārdnīcas vērtībām
- Izmantojot
Deconstruct
noKeyValuePair<TKey,TValue>
programmā C# 7 Deconstruct
undiscards
izmantošana C# 7Deconstruct
atslēgas un vērtības pāra izveide vecākās C# versijās- Izmantojot
dictionary.ElementAt()
funkciju unfor
cilpu - Izmantojot C#
dictionary.AsParallel().ForAll()
Izskatīsim piemēru, lai to labāk izprastu
Esmu izveidojis vārdnīcas paraugu, izmantojot C#
for cilpu
Aplūkojiet zemāk redzamo vārdnīcu C#
var dictionaryExample = new Dictionary<string, string>();
for (var i = 1; i <= 5; i++)
{
dictionaryExample["key" + i] = "value" + i.ToString();
}
On this page
1. risinājums: Izmantojot C# foreach
cilpu
Izmantojot C# foreach
cilpu, tas ir vienkāršākais un vienkāršākais veids, kā C# pārlūkot vārdnīcas atslēgas vērtības.
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
Mainīgajam dictionary
iepriekš minētajā foreach
cilpā būs KeyValuePair<TKey, TValue>
tips
Mēs varam viegli piekļūt Key
& Value
tipa KeyValuePair
īpašībām.
2. risinājums: Iterēt tikai pār C# vārdnīcas atslēgām
Ja vēlaties cilpot tikai pa vārdnīcas atslēgām, izmantojiet C# vārdnīcas īpašību dictionary.Keys
.
foreach(var key in dictionaryExample.Keys)
{
Console.WriteLine("dictionary Key is {0}",key);
}
3. risinājums: Iterējiet tikai pār C# vārdnīcas vērtībām
Ja vēlaties iterēt tikai vārdnīcas vērtības, izmantojiet C# vārdnīcas īpašību dictionary.Values
.
foreach (var value in dictionaryExample.Values)
{
Console.WriteLine("dictionary Value is {0}", value);
}
4. risinājums: Izmantojot Deconstruct()
no KeyValuePair<TKey,TValue>
programmā C# 7
Dekonstruktori ir ieviesti C# 7.0 versijā.
Un, ja jūs izmantojat .NET Core 2.0+ lietojumprogrammu KeyValuePair<TKey, TValue>
tipam būs Deconstruct()
metode.
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;
}
}
Lai piekļūtu vārdnīcas atslēgas un vērtības pārim, izmantojiet Deconstruct()
tipa KeyValuePair
funkciju.
foreach (var (key,value) in dictionaryExample)
{
Console.WriteLine("dictionary key is {0} and value is {1}", key, value);
}
5. risinājums: Deconstruct
un discards
izmantošana C# 7
Sākot ar C# 7.0 versiju, C# atbalsta atmetumus
Atmetumi ir vietvārdu mainīgie, kas lietojumprogrammas kodā tiek tīši neizmantoti
Bieži vien tos dēvē par apakšsvītras _
mainīgajiem.
Atmetumi nav nekas cits kā nepiešķirti mainīgie, tiem nav vērtības.
Ja vārdnīcā vēlamies cilpot tikai atslēgas, varam izmantot atmetuma mainīgos.
foreach (var (key, _) in dictionaryExample)
{
Console.WriteLine($"dictionary key is {key}");
}
Līdzīgi, ja vēlaties izmantot tikai vārdnīcas vērtības.
foreach (var (_, value) in dictionaryExample)
{
Console.WriteLine($"dictionary value is {value}");
}
6. risinājums: Deconstruct
atslēgu un vērtību pāru vecākās C# versijās
Struktūrai KeyValuePair nav funkcijas Deconstruct()
vecākās C# versijās (C# 4.7.2 zemāk)
Tāpēc, ja vēlaties izmantot Deconstruct()
, lai veidotu atslēgu un vērtību pāru cilpas, ir risinājums, kā to apiet
foreach (var (key, value) in dictionaryExample.Select(x => (x.Key, x.Value)))
{
Console.WriteLine("dictionary key is {0} and value is {1}", key, value);
}
Lielākajā daļā gadījumu mēs šo metodi neizmantosim, bet ir labi to zināt.
7. risinājums: Izmantojot dictionary.ElementAt()
funkciju un for
cilpu
Mēs varam izmantot vienkāršu for
cilpu, lai iterētu pa vārdnīcas atslēgu un vērtību pāriem.
Mēs varam piekļūt KeyValuePair
vērtībām pēc vārdnīcas indeksa, izmantojot dictionary.ElementAt()
funkciju.
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);
}
Tas atkal nav labs veids, kā veikt cilpu pa vārdnīcu, jo ElementAt()
funkcijai būs O(n)
un mums ir for
cilpa iepriekš, tāpēc laika sarežģītība būs O(n^2)
Lielu vārdnīcu gadījumā tas ietekmēs veiktspēju.
Ja vēlaties iegūt vārdnīcas atslēgas un vērtības pāru indeksu, izmantojiet šo metodi
Es nedomāju par nevienu reālu lietošanas gadījumu, kad tiks izmantots vārdnīcas indekss
8. risinājums: Izmantojot C# dictionary.AsParallel().ForAll()
Ja jums ir liela vārdnīca, mēs varam izmantot paralēlo valodas integrēto vaicājumu (LINQ), izmantojot ParallelEnumerable.AsParallel
paplašinājuma metodi vārdnīcai un izpildot vaicājumu, izmantojot ParallelEnumerable.ForAll
metodi.
Vaicājums sadala avotu uzdevumos, kas tiek izpildīti asinhroni vairākos pavedienos
dictionaryExample.AsParallel().ForAll(keyValuePair =>
Console.WriteLine("dictionary key is {0} and value is {1}", keyValuePair.Key, keyValuePair.Value));
Labākais veids, kā veidot cilpu vārdnīcā programmā C#
Lai gan mums ir vairāki veidi, kā iterēt pa vārdnīcas atslēgas vērtībām, dodam priekšroku vienkāršai foreach cilpei
Un, ja vēlaties izmantot tikai C# vārdnīcas atslēgas vai vērtības, izmantojiet dictionary.Keys
vai dictionary.Values
, nevis iterēt visu vārdnīcu