当我尝试循环枚举数列表时,如何获取下一个和上一个值。请找到以下代码。
public static void Main()
{
List<string> mylist = new List<string>();
mylist.Add("C#");
mylist.Add("Java");
mylist.Add("C");
mylist.Add("C++");
// To get an Enumerator
// for the List.
List<string>.Enumerator em = mylist.GetEnumerator();
display(em);
}
static void display(IEnumerator<string> em)
{
while (em.MoveNext()) {
string val = em.Current; // Want to know Next and Previous values of current value.
Console.WriteLine(val);
}
}
Run Code Online (Sandbox Code Playgroud)
从GetEnumerator()某种意义上说,枚举器是数据上仅向前、仅一次的游标。如果您想知道下一个值:使用MoveNext() 并查看。如果您想知道以前的值是什么:您应该记住它。由于大多数数据结构不是双向链表,而且由于枚举器甚至不一定基于存储在任何地方的数据(您可以使用迭代器块做一些非常有趣的事情),所以没有其他可能。
在 : 的特定情况下,List<T>可能使用for循环而不是您的类似foreach枚举器访问,然后您就可以使用list[i-1]and list[i+1](在检查边界条件后)。
注意:作为一般规则,您应该避免直接使用枚举器 API,除非您非常非常熟悉底层发生的事情。首选foreach或基于索引器的访问。
你可以用你自己的迭代器块概括一个三元组(上一个/当前/下一个)迭代器;输出来自{ 1, 4, 5, 1, 543, 2, 1, 54, 23 }
是:
1-4-5
4-5-1
5-1-543
1-543-2
543-2-1
2-1-54
1-54-23
Run Code Online (Sandbox Code Playgroud)
代码:
1-4-5
4-5-1
5-1-543
1-543-2
543-2-1
2-1-54
1-54-23
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |