gpt4 book ai didi

Scala:滑动(N,N)与分组(N)

转载 作者:行者123 更新时间:2023-12-03 04:47:18 26 4
gpt4 key购买 nike

当我需要迭代 n 个元素组中的集合而不重新处理其中任何一个时,我发现自己最近使用了 slider(n,n)。我想知道使用 grouped(n) 迭代这些集合是否更正确。我的问题是,就性能而言,是否有特殊原因需要在这种特定情况下使用其中一种或另一种。

val listToGroup = List(1,2,3,4,5,6,7,8)
listToGroup: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)

listToGroup.sliding(3,3).toList
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))

listToGroup.grouped(3).toList
res1: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))

最佳答案

使用sliding而不是grouped的原因实际上仅适用于当您希望“窗口”的长度与“滑动”的长度不同时(也就是说,使用 sliding(m, n) 其中 m != n):

listToGroup.sliding(2,3).toList
//returns List(List(1, 2), List(4, 5), List(7, 8))

listToGroup.sliding(4,3).toList
//returns List(List(1, 2, 3, 4), List(4, 5, 6, 7), List(7, 8))

正如 som-snytt 在评论中指出的那样,不会有任何性能差异,因为它们都是在 Iterator 中实现的,返回一个新的 GroupedIterator。但是,编写 grouped(n) 比编写 sliding(n, n) 更简单,并且您的代码的预期行为会更干净、更明显,所以我建议分组(n)

作为在何处使用滑动的示例,请考虑以下问题:分组根本不够:

给定一个数字列表,找到长度为 4 且总和最大的子列表。

现在,抛开动态规划方法可以产生更有效的结果这一事实,这可以解决为:

def maxLengthFourSublist(list: List[Int]): List[Int] = {
list.sliding(4,1).maxBy(_.sum)
}

如果您在这里使用grouped,您将无法获得所有子列表,因此sliding更合适。

关于Scala:滑动(N,N)与分组(N),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32874419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com