iter(.)
和 next(.)
内置函数允许迭代列表(或实现 __iter__(self)
和 __next__(self)
的其他对象),无需 for 循环且无需索引。
C# 有相当于
iter(.)
和 next(.)
的东西吗?
假设由于某种原因您想要合并两个列表排序数字而不使用 for 循环或索引。您可以使用迭代器和
next(.)
来执行此操作,如下所示:
def merge(nums1, nums2):
nums1Iter = iter(nums1)
nums2Iter = iter(nums2)
num1 = next(nums1Iter)
num2 = next(nums2Iter)
while True:
if num1 <= num2:
yield num1
try:
num1 = next(nums1Iter)
except StopIteration:
yield num2
yield from nums2Iter
break
else:
yield num2
try:
num2 = next(nums2Iter)
except StopIteration:
yield num1
yield from nums1Iter
break
nums1 = range(0, 10, 2)
nums2 = range(1, 20, 3)
print(list(merge(nums1, nums2)))
IEnumerator Iterface
和 IEnumerator<T> Interface
各有一个 MoveNext
方法一 Current
属性,可让您按如下方式进行迭代:
int[] numsArr = {1, 2, 3, 4, 5};
IEnumerator numsEnumerator = numsArr.GetEnumerator();
int num;
while (numsEnumerator.MoveNext()) {
num = (int) numsEnumerator.Current;
}
会打印出:
1
2
3
4
5
备注:
GetEnumerator
方法,您可以使用该方法获取数组、列表等对象的枚举器。IEnumerator.Current
属于 object
类型,因此如果将其值分配给类型化变量,则必须进行显式转换(不确定 类型化变量 是否是此处合适的术语)。否则,您将收到 Cannot implicitly convert type 'object' to ...
错误。