将一个值映射到具有公共关系Scala的所有值 [英] Map one value to all values with a common relation Scala
本文介绍了将一个值映射到具有公共关系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屋!
查看全文