Home All Groups Group Topic Archive Search About

iterator in Dictionary<>?

Author
27 Sep 2006 12:03 PM
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

Author
27 Sep 2006 12:15 PM
Joanna Carter [TeamB]
"Hyun-jik Bae" <imays_NOSPAM_@paran.com> a écrit dans le message de news:
uO889zi4GHA.3***@TK2MSFTNGP02.phx.gbl...

| 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

--
Joanna Carter [TeamB]
Consultant Software Engineer
Author
27 Sep 2006 2:31 PM
Carl Daniel [VC++ MVP]
Hyun-jik Bae wrote:
> 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
Author
27 Sep 2006 8:30 PM
Jon Skeet [C# MVP]
Hyun-jik Bae <imays_NOSPAM_@paran.com> wrote:
> 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.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet   Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too

AddThis Social Bookmark Button