- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个元素序列。序列只能迭代一次,可以“无限”。
获取这样一个序列的头部和尾部的最佳方法是什么?
更新:如果我在原始问题中包含一些说明,那就更好了:)
头是序列的第一个元素,尾是“其余”。这意味着尾部也是“无限”的。
当我说无限时,我的意思是“非常大”和“我不想一次将它全部存储在内存中”。它也可能实际上是无限的,例如传感器数据(但它不是我的情况)。
当我说它只能迭代一次时,我的意思是生成序列会占用大量资源,所以我不想再重复一次。它也可能是 volatile 数据,再次像传感器数据,在下次读取时不会相同(但在我的情况下不是)。
最佳答案
分解IEnumerable<T>
into head & tail 对于递归处理(与函数列表不同)不是特别好,因为当您递归地使用 tail 操作时,您将创建许多间接。但是,您可以这样写:
我忽略了参数检查和异常处理之类的东西,但它显示了这个想法......
Tuple<T, IEnumerable<T>> HeadAndTail<T>(IEnumerable<T> source) {
// Get first element of the 'source' (assuming it is there)
var en = source.GetEnumerator();
en.MoveNext();
// Return first element and Enumerable that iterates over the rest
return Tuple.Create(en.Current, EnumerateTail(en));
}
// Turn remaining (unconsumed) elements of enumerator into enumerable
IEnumerable<T> EnumerateTail<T>(IEnumerator en) {
while(en.MoveNext()) yield return en.Current;
}
HeadAndTail
方法获取第一个元素并将其作为元组的第一个元素返回。元组的第二个元素是 IEnumerable<T>
这是从剩余元素生成的(通过迭代我们已经创建的枚举器的其余部分)。
关于c# - 从只能迭代一次的 IEnumerable 获取头部和尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245703/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!