如何定义有序的Kotlin序列

时间:2018-09-07 17:54:29

标签: kotlin

是否有一种方法可以在Kotlin中设置Sequence的状态以告知数据已排序?

我知道我可以按照以下方式创建Kotlin Sequence

generateSequence(0) { it + 1 }.windowed(size = 100, step = 1)

我想如果知道序列是有序的,那么对该序列的某些操作会更高效。例如,distinct()。如果顺序不正确,则需要使用临时存储。有没有办法生成此序列并告诉Kotlin我们知道数据已经排序了?

1 个答案:

答案 0 :(得分:0)

由于序列是惰性的并且可能是无限的,因此除了 sequence 排序之外的任何排序概念都将被认为是邪恶的。进行迭代时,如何得知下一个(最大)值?
也就是说,甚至还不清楚“排序(无限)序列”是一个定义明确,更不用说的有用概念(在编程库的上下文中;在数学中,当然完全可以!)。

根据您计划对结果集合进行的操作,可以使用排序后的集合:

generateSequence(0) { it + 1 }.windowed(size = 100, step = 1).
        toSortedSet(Comparator { o1, o2 -> o1.sum() - o2.sum() })

您定义了一个列表序列,并且尚不清楚如何排序这些列表。

注意事项:

  • 不再懒惰。
  • 不允许重复; Kotlin库似乎缺少一个多集(或袋,或计数集,或...)实现。通过将值与计数器成对构成,易于模拟。
  • 某些操作比没有序列保证的线性序列昂贵。