将一个值映射到具有公共关系Scala的所有值 [英] Map one value to all values with a common relation Scala

查看:148
本文介绍了将一个值映射到具有公共关系Scala的所有值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

拥有一组数据:

  {sentenceA1} {\t} {sentenceB1} 
{sentenceA1 } {\t} {sentenceB2}
{sentenceA2} {\t} {sentenceB1}
{sentenceA3} {\t} {sentenceB1}
{sentenceA4} {\t我想将一个句子A映射到Scala中有一个常见句子B的所有句子。所以结果将是这样的:

  {sentenceA1}  - > {sentenceA2,sentenceA3,sentenceA4}或

{sentenceA2} - > {sentenceA1,sentenceA3}


解决方案

  val lines = List(
sentenceA1\tsentenceB1,
sentenceA1\tsentenceB2,
sentenceA2\tsentenceB1 ,
sentenceA3\tsentenceB1,
sentenceA4\tsentenceB2


val afterSplit = lines.map(_。split(\ t


val ba = afterSplit
.groupBy(_(1))
.mapValues(_。map(_(0)))

val ab = afterSplit
.groupBy(_(0))
.mapValues(_。map(_(1)))

val result = ab.map {case a,b)=>
a - > b.foldLeft(Set [String]())(_ ++ ba(_))。diff(Set(a))
}


Having a set of data:

{sentenceA1}{\t}{sentenceB1}  
{sentenceA1}{\t}{sentenceB2}  
{sentenceA2}{\t}{sentenceB1}   
{sentenceA3}{\t}{sentenceB1}   
{sentenceA4}{\t}{sentenceB2}    

I want to map a sentenceA to all the sentences that have a common sentenceB in Scala so the result will be something like this:

{sentenceA1}->{sentenceA2,sentenceA3,sentenceA4} or  

{sentenceA2}->{sentenceA1, sentenceA3}

解决方案

val lines = List(
  "sentenceA1\tsentenceB1",
  "sentenceA1\tsentenceB2",
  "sentenceA2\tsentenceB1",
  "sentenceA3\tsentenceB1",
  "sentenceA4\tsentenceB2"
)

val afterSplit = lines.map(_.split("\t"))

val ba = afterSplit
  .groupBy(_(1))
  .mapValues(_.map(_(0)))

val ab = afterSplit
  .groupBy(_(0))
  .mapValues(_.map(_(1)))

val result = ab.map { case (a, b) =>
  a -> b.foldLeft(Set[String]())(_ ++ ba(_)).diff(Set(a))
}

这篇关于将一个值映射到具有公共关系Scala的所有值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆