gpt4 book ai didi

scala - Scala 列表中的计数模式

转载 作者:行者123 更新时间:2023-12-01 15:19:47 25 4
gpt4 key购买 nike

我的列表如下所示:List(Person,Invite,Invite,Person,Invite,Person...)。我试图根据 inviteCountRequired 进行匹配,这意味着列表中 Person 对象之后的 Invite 对象是可变的。这样做的最佳方法是什么?到目前为止,我的匹配代码如下所示:

aList match { 
case List(Person(_,_,_),Invitee(_,_,_),_*) => ...
case _ => ...
}

第一个堆栈问题,请放轻松。

最佳答案

val aList = List(Person(1), Invite(2), Invite(3), Person(2), Invite(4), Person(3), Invite(6), Invite(7))

然后索引列表中的每个位置并选择Person实例,

val persons = (aList zip Stream.from(0)).filter {_._1.isInstanceOf[Person]}

List((Person(1),0), (Person(2),3), (Person(3),5)) 。然后定义子列表,其中下限对应于 Person 实例,

val intervals = persons.map{_._2}.sliding(2,1).toArray
res31: Array[List[Int]] = Array(List(0, 3), List(3, 5))

构建子列表,

val latest = aList.drop(intervals.last.last)  // last Person and Invitees not paired
val associations = intervals.map { case List(pa,pb,_*) => b.slice(pa,pb) } ++ latest

因此结果看起来像

Array(List(Person(1), Invite(2), Invite(3)), List(Person(2), Invite(4)), List(Person(3), Invite(6), Invite(7)))

现在,

associations.map { a => 
val person = a.take(1)
val invitees = a.drop(1)
// ...
}

这种方式可以看成是可变尺寸滑动。

关于scala - Scala 列表中的计数模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790558/

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