iterator in Dictionary<>?

H

Hyun-jik Bae

Is there anything correspondant to the iterator for Dictionary<>? For
example, something which is similar to std::map::iterator in C++?

Reply please. Thanks in advance.

Hyun-jik Bae
 
J

Joanna Carter [TeamB]

"Hyun-jik Bae" <[email protected]> a écrit dans le message de (e-mail address removed)...

| Is there anything correspondant to the iterator for Dictionary<>? For
| example, something which is similar to std::map::iterator in C++?

Sure, there are two.

{
Dictionary<string, MyType> dict = new Dictionary<string, MyType>();

...

foreach (string s in dict.Keys)
...

foreach (MyType t in dict.Values)
...

}

Joanna
 
C

Carl Daniel [VC++ MVP]

Hyun-jik Bae said:
Is there anything correspondant to the iterator for Dictionary<>? For
example, something which is similar to std::map::iterator in C++?

All of the framework collection classes implement IEnumerable (and
IEnumerable<T> for generic collections). IEnumerable provides a simple
iterator-like in-order enumeration of the collection.

The exact type of the enumerator for a collection is generally a nested,
private class, so you never actually declare variables of those types.
Instead, you use the IEnumerable ( <T> ) interface type.

Using C++/CLI or C# (I don't know about VB.NET) you usually don't even
declare variables of type IEnumerable. Rather, you make use of the built-in
language feature known as foreach.

foreach (T t in collection)
{
}

is syntactic sugar for:

IEnumerable<T> it = collection.GetEnumerator();
while (it.MoveNext())
{
T t = it.Current;
// ...
}

In the case of System.Collections.Generic.Dictionary, there are 3 possible
iterators:

Dictionary<K,V> dict = ...

dict.GetEnumerator() - returns
IEnumerable<System.Collections.Generic.KeyValuePair<K,V>>. This is most
closely equivalent to std::map::iterator (which iterates over
std::pair<K,V>).

dict.Keys.GetEnumerator() - returns IEnumerable<K>. This iterator
enumerates the keys in the dictionary.

dict.Values.GetEnumerator() - returns IEnumerable<V>. This iterator
enumerates the values in the dictionary in the same order that the keys are
returned by dict.Keys.GetEnumerator().

-cd
 
J

Jon Skeet [C# MVP]

Hyun-jik Bae said:
Is there anything correspondant to the iterator for Dictionary<>? For
example, something which is similar to std::map::iterator in C++?

Reply please. Thanks in advance.

There's the Keys property to return an enumeration of the keys, the
Values property to return an enumeration of the values, or just call
GetEnumerator() (or use foreach) to get an enumeration of KeyValuePair
items.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top