![]() |
1
7
当你想通过索引访问元素时,使用序列并不是一个好主意。序列的设计允许顺序迭代。我将把序列的必要部分转换为数组,然后按索引选择元素:
关于您的实现——我认为它不能显著地变得更优雅。当实现需要以交错的方式从多个源获取值的函数时,这是一个普遍的问题——没有优雅的方式来编写这些值! 但是,您可以使用如下递归以函数方式编写:
|
![]() |
2
2
当需要扫描序列并将结果累积到 o(n) ,您始终可以返回到seq.fold:
这个解决方案的缺点是它将枚举序列到最后,即使它已经积累了所有需要的元素。 |
![]() |
3
1
这是我的照片。此解决方案将只按需要进入序列,并以列表形式返回元素。
这里唯一的假设是对您提供的索引列表进行排序。否则,该功能将无法正常工作。 |
![]() |
4
0
对返回的结果进行排序是否有问题? 该算法将在输入序列上线性工作。只需要对索引进行排序。如果序列很大,但索引不多,那么速度会很快。 复杂性是:n->最大(索引),m->索引计数:o(n+mlogm),在最坏的情况下。
这里有一个list.fold变量,但阅读起来更复杂。我喜欢第一个:
附加:仍然比你的变种慢,但比我的旧变种快得多。因为没有使用seq.skip,这就创建了新的枚举器,并且大大降低了速度。
|
![]() |
Thomas · 使类型别名在F中不可互换# 3 年前 |
![]() |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 7 年前 |
![]() |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 7 年前 |
![]() |
matekus · F#-包含数字的字符串的自然排序 7 年前 |
![]() |
matekus · F#类型匹配-无法创建映射或匹配记录 7 年前 |
![]() |
Rob Lyndon · 未找到F#ProvidedTypes文件 7 年前 |
![]() |
red-swan · 如何将intro ML.Net演示翻译为F#? 7 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |