我现在脑子里在想如何使这件事起作用。
我有一个案例类,如:
case class Visitors(start: Int, end: Int, visitor_num: Int)现在假设我创建了两个独立的类型访问者序列:
val visitors_A = Seq(Visitors(start = 1, end = 1, visitor_num = 2),Visitors(start = 2, end = 2, visitor_num = 129),Visitors(start = 3, end = 3, visitor_num = 90))
val visitors_B = Seq(Visitors(start = 1, end = 1, visitor_num = 0),Visitors(start = 2, end = 2, visitor_num = 0))我想要创建一个单独的访问者序列,它将输出与visitors_A和visitors_B具有相同启动时间的访问者序列,输出示例应该是:
visitors_Same = Seq(Visitors(start = 1, end = 1, visitor_num = 2),Visitors(start = 2, end = 2, visitor_num = 129)它应该检查启动时间是否在这两个序列中,如果是,从visitors_A获取序列值并将其追加到列表中。
让我困惑的是,我使用的是“自定义”类型的访问者,而且我似乎无法在visitor_b中运行互联系统或包含函数调用,我知道我可能需要检查B中是否存在从A开始的值,然后再映射(?)输出到新的类型访问者序列?
发布于 2019-01-16 02:12:32
如果您想要一个班轮(但可能效率很低),这里是这样的:
val r1 = visitors_A.filter(va => visitors_B.exists(vb => vb.start == va.start))如果首先将visitors_B转换为Map (逻辑上映射为start -> visitor),则可以获得更快的速度:
val vbm = visitors_B.map(vb => (vb.start, vb)).toMap
val r2 = visitors_A.filter(va => vbm.contains(va.start))编辑
实际上,由于根本不使用Map中的值,所以可以使用Set,这将比Map更有效一些。
val vbs = visitors_B.map(vb => vb.start).toSet
val r3 = visitors_A.filter(va => vbs.contains(va.start))https://stackoverflow.com/questions/54209465
复制相似问题