c# - 枚举与索引与迭​​代

标签 c# enumeration conceptual

我一直在阅读 Eric Lippert's blog现在有一段时间了(非常好,你应该检查一下)和在他的一个评论中 posts ,他提到他无意索引一系列数字,而只是列举它们。

枚举和索引之间有什么区别,我到处都搜索过?在我的搜索过程中,当迭代被带入方程式时,我变得更加困惑?有人可以解释这 3 个概念,甚至可以举个例子吗?在您将其标记为欺骗之前,我已经看到了一些关于“迭代器与枚举器”的问题,但是我还没有看到正确的解释(因此出现了问题)。感谢您的帮助。

最佳答案

在这篇文章的评论中,Eric 回应了一项观察,即由于排列的大小呈指数增长,它很快就会超过 32 位表示的数字。 Eric 的答复是,他无意对排列进行索引,他的意思是定义一个编号方案以获得排列的序号。这就是为什么,他说,溢出 32 位不是他关心的问题之一:他的方法允许枚举,或者简单地“产生”,一些顺序的所有排列,如反对提供一种根据某种编号方案获得 N-th 排列的方法。

将此与 question about producing N-th permutation without going through all the preceding ones 中讨论的问题进行对比: 在这里,作者想要对排列进行索引或给数字,因此整数的大小是他们关注的问题。

这是在上面链接的问题中讨论的索引排列的示例:

1 ABC
2 ACB
3 BAC
4 BCA
5 CAB
6 CBA

此索引方案可让您回答两个问题:

  • 特定排列的数量是多少,例如,BCA? (是 4 个)
  • 什么是排列数 X,比如 5? (它是 CAB)

这个问题可能比枚举所有排列更难,因为您需要生成一个编号方案。

关于c# - 枚举与索引与迭​​代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16495986/

相关文章:

c# - 从 GAC 列出所有实现特定接口(interface)的 DLL

c# - 我如何编码列表<int>?

c - 如何将枚举常量的值设置在int范围之外?

c - 使用循环来知道“对象在 c 中何时过去

python - 概念:从 "synonyms"列表中收集 "words"

c# - AES 字符串加密/解密字符间隔

c# - MongoDb C# 驱动程序在一个原子操作中更新多个文档

c# - 为什么多维数组的枚举值不等于自身?

javascript - 我的 API 是否应该同时包含枚举的数字和字符串表示形式?

c# - 这种选择使用哪个 C# 集合的策略缺少什么?