首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查自定义序列中存在的特定键/值

检查自定义序列中存在的特定键/值
EN

Stack Overflow用户
提问于 2019-01-16 02:06:42
回答 1查看 38关注 0票数 0

我现在脑子里在想如何使这件事起作用。

我有一个案例类,如:

代码语言:javascript
复制
case class Visitors(start: Int, end: Int, visitor_num: Int)

现在假设我创建了两个独立的类型访问者序列:

代码语言:javascript
复制
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具有相同启动时间的访问者序列,输出示例应该是:

代码语言:javascript
复制
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开始的值,然后再映射(?)输出到新的类型访问者序列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-16 02:12:32

如果您想要一个班轮(但可能效率很低),这里是这样的:

代码语言:javascript
复制
val r1 = visitors_A.filter(va => visitors_B.exists(vb => vb.start == va.start))

如果首先将visitors_B转换为Map (逻辑上映射为start -> visitor),则可以获得更快的速度:

代码语言:javascript
复制
val vbm = visitors_B.map(vb => (vb.start, vb)).toMap
val r2 = visitors_A.filter(va => vbm.contains(va.start))

编辑

实际上,由于根本不使用Map中的值,所以可以使用Set,这将比Map更有效一些。

代码语言:javascript
复制
val vbs = visitors_B.map(vb => vb.start).toSet
val r3 = visitors_A.filter(va => vbs.contains(va.start))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54209465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档