C++ 中Iterator与C#中的KeyValuePair

C++ 中Iterator可以用++来进行遍历,只要拿到First就可以脱离容器进行遍历
C#中的KeyValuePair却没有,如何达到用自己来控制遍历
我现在算法里有两个函数
TObject FirstOb()
TObject NextOb()
用C++的Iterator就很好实现
C#。。。。。。
C++下我可以
Class test
{
map<int,TObject> m_subList;
map<int,TObject>::iterator m_it;
TObject first()
{
m_it = m_SubList.Bigen();
return m_it.Second;
}

TObject next()
{
mit++;
return mit.Second;
}
}
以上是大体的意思,刚转C#有点水土不服。。。。
我知道有~foreach( KeyValuePair<string, int> i in dict )这个方法
但是我的算法遍历是一个~被动的方式,遍历的时候需要由外部来进行推动

比如说表格的遍历读取数据对象~只有当外部表现层,处理完了一个对象,在由~FRIST,Next提取下一个需要处理的对象。。。难道我要将我内部的数据链交给外部来处理?

第1个回答  2011-01-22
.Net已经帮你封装了迭代器,集合可以用foreach遍历,
比C++的迭代器好用太多了···
比如C#字典类(.Net的哈希表的一种叫法),
var dict = new Dictionary<string, int> {
{ "Apple", 1 }, { "Orange", 2 }, { "Banana", 3 }
};
foreach( KeyValuePair<string, int> i in dict ) // 这里的KeyValuePair可用var替换
{
Console.WriteLine( i.Key + " : " + i.Value );
}
// 运行结果:
// Apple : 1
// Orange : 2
// Banana : 3

补充:
大概明白你的意思了,使用迭代器的MoveNext方法就行了
// 取得字典的迭代器(枚举器)
var enumerator = dict.GetEnumerator();
// 输出当前的项,每一项都是一个KeyValuePair<string, int>
Console.WriteLine(enumerator.Current);
// 输出下一项
Console.WriteLine(enumerator.MoveNext());本回答被提问者采纳
第2个回答  2011-01-28
用For啊 老兄,很你丶的
相似回答