gpt4 book ai didi

scala - 来自值列表的循环数,在 Spark 和 Scala 中是正数和负数的混合

转载 作者:可可西里 更新时间:2023-11-01 15:02:05 25 4
gpt4 key购买 nike

有一个包含值列表的 RDD,这些值是正值和负值的混合。需要根据此数据计算周期数。

例如,

val range = List(sampleRange(2020,2030,2040,2050,-1000,-1010,-1020,起点,-1030,2040,-1020,2050,2040,2020,终点, -1060,-1030,-1010)

上面列表中每个值之间的间隔是 1 秒。即,2020 和 2030 以 1 秒为间隔记录,依此类推。

它从负转正并保持正 >= 2 秒的次数。
如果 >= 2 秒,则为一个循环。

周期数:逻辑
示例 1: 列表(1,2,3,4,5,6,-15,-66)
循环次数为1
原因:当我们从列表的第一个元素移动到第 6 个元素时,我们有 5 个间隔,这意味着 5 秒。所以一个循环。当我们移动到列表的第 6 个元素时,它是一个负值。所以我们从第 6 个元素开始计数并移动到第 7 个元素。负数只有2个,间隔只有1个,所以不算循环。
示例 2:
列表(11,22,33,-25,-36,-43,20,25,28)
循环次数为3
原因:当我们从列表的第一个元素移动到第三个元素时,我们有 2 个间隔,这意味着 2 秒。所以一个循环 当我们移动到列表的第 4 个元素时,它是一个负值。所以我们从第 4 个元素开始计数,然后移动到第 5、6 个元素。我们有 2 个间隔,这意味着 2 秒。所以一个循环 当我们移动到列表的第 7 个元素时,它是一个正值。所以我们从第 7 个元素开始计数,然后移动到第 8、9 个元素。我们有 2 个间隔,这意味着 2 秒。所以一个循环。

range 是用例中的 RDD。看起来像
scala> 范围
范围:Seq[com.Range] = List(XtreamRange(858,890,899,920,StartEngage,-758,-790,-890,-720,920,940,950))

最佳答案

您可以对此进行编码“有多少次它从负数变为正数并保持正数 >= 2 秒。如果 >= 2 秒则为一个循环。”几乎直接进入与守卫的模式匹配。表达式 if(h < 0 && ht > 0 && hht > 0)检查循环并将结果加一,然后继续列表的其余部分。

def countCycles(xs: List[Int]): Int = xs match {
case Nil => 0
case h::ht::hht::t if(h < 0 && ht > 0 && hht > 0) => 1 + countCycles(t)
case h::t => countCycles(t)
}

scala> countCycles(range)
res7: Int = 1

关于scala - 来自值列表的循环数,在 Spark 和 Scala 中是正数和负数的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219085/

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