我已经阅读Eric Lippert的博客有一段时间了(非常好,您应该去看看),在他的某篇文章的评论中,他提到他没有意图对一系列数字进行索引,而只是枚举它们。
枚举和索引之间有什么区别?我已经搜索了所有地方,并且当迭代被纳入方程式时,我变得更加困惑了。有人能解释一下这三个概念,甚至举个例子吗?在您将其标记为重复之前,请注意,我已经看过一些关于“Iterator vs Enumerator”的问题,但我尚未看到一个合适的解释(因此是这个问题)。谢谢你的帮助。
我已经阅读Eric Lippert的博客有一段时间了(非常好,您应该去看看),在他的某篇文章的评论中,他提到他没有意图对一系列数字进行索引,而只是枚举它们。
枚举和索引之间有什么区别?我已经搜索了所有地方,并且当迭代被纳入方程式时,我变得更加困惑了。有人能解释一下这三个概念,甚至举个例子吗?在您将其标记为重复之前,请注意,我已经看过一些关于“Iterator vs Enumerator”的问题,但我尚未看到一个合适的解释(因此是这个问题)。谢谢你的帮助。
1 ABC
2 ACB
3 BAC
4 BCA
5 CAB
6 CBA
BCA
的编号是 4。X
,例如,5 是什么排列?(它是 CAB
)operator []
索引一个array
,或者索引一个list
(至少在C#中是这样,更加正式的计算机科学人员会感到不适)。但是你无法索引IEnumerable<T>
,因为枚举只意味着你可以按顺序浏览所有项。但你无法跳转到特定项。string text = "hello";
foreach( var c in text ) Console.WriteLine(c);
for( int i = 0 ; i < text.Length ; i++ ) Console.WriteLine(text[i]);
这是真实的数据:
var arr = new int[15];
number
中没有数据,只是一个提供枚举数据的承诺。您需要将其 实例化 以获得真实数据:var number = GetNumbers();
public IEnumerable<int> GetNumbers()
{
while(true) yield return 1;
}
IEnumerabl<T>
来枚举序列。然后他可以选择迭代该序列,例如使用foreach
循环,或者做其他事情-例如取前几个元素,并丢弃其余的枚举。 - Sergey KalinichenkoHasNext
和GetNext
方法来 "produce" 一个序列。 - Sergey Kalinichenko