Scala 将映射中的键与列表中的每个字符串进行比较,如果匹配,则将其与旧映射中的对应值存储在新映射中
例如: 地图如下: 输出=映射(执行->1,()->2,for->1,in->1,残暴->1,每个人->1,感觉->1,基督->1,所有->1,看到->1,哭泣->1,它->1,两->1,一->2,男人->1,我->3,对->1,哭泣->1,你->1,调谐->1,周围->1,是->1,那里->1,小时->1,如何->1,电视->1,我->1,不是->1,可以->1,是->1,激情->1,我们坐->1,当->1,如->1,of->2,和->1,wasted->1,procedures->1,类型为[Any,Int]的->3) 列表(pos)是从包含大量单词的文件创建的。它可以在积极的词语部分找到。为了创建该列表,我使用了以下代码:Scala 将映射中的键与列表中的每个字符串进行比较,如果匹配,则将其与旧映射中的对应值存储在新映射中,scala,list,hashmap,Scala,List,Hashmap,例如: 地图如下: 输出=映射(执行->1,()->2,for->1,in->1,残暴->1,每个人->1,感觉->1,基督->1,所有->1,看到->1,哭泣->1,它->1,两->1,一->2,男人->1,我->3,对->1,哭泣->1,你->1,调谐->1,周围->1,是->1,那里->1,小时->1,如何->1,电视->1,我->1,不是->1,可以->1,是->1,激情->1,我们坐->1,当->1,如->1,of->2,和->1,wasted->1,procedures->1,类型为
val words=“”([A-Za-z])+“”
val pos=scala.io.Source.fromFile(“Positive_words.txt”).getLines.drop(35).flatMap(words.findAllIn).toList
我注意到,当列表与地图匹配时,使用以下任一方法:
val result=output.filterKeys(pos.contains)
或
output.foreach{x=>pos.foreach{aa=>if(x._1.toString()==aa)}
导致了意想不到的结果。输出中显示了一些pos中不存在的单词
下面是输出代码段:
val结果=输出过滤键(位置包含)
结果:scala.collection.immutable.Map[Any,Int]=Map(in->9,all->1,a->2,to->1,around->1,passion->1,like->1,of->2,the->3)
这是打印一些不相关的项目,它们甚至不属于list=pos的一部分
像in、all、to这样的词是不应该出现的
PS:如果不使用上述代码创建一个简单列表(pos),则输出正常。您可以使用map的
filterKeys
仅保留pos
列表中存在的键,使用pos.contains
作为谓词:
val result = output.filterKeys(pos.contains)
result.foreach(println)
我不知道这是否对你有帮助。但通常只有原语(boolean、int、每种以小写开头的类型)应该与“=”进行比较。所有其他对象都应该与.equals()进行比较,字符串就是这样的对象。
也许你应该记住这一点。创建列表时使用flatMap会产生问题 通过使用以下代码而不是我之前编写的代码解决了此问题:
val pos=scala.io.Source.fromFile(“Positive_words.txt”).getLines.drop(35)。toList
谢谢。虽然Java中也是这样,但在Scala中,
==
默认为对象的.equals()
。刚才看到,尽管这篇文章清楚地讨论了Scala,但它也被标记为Java
,这显然是造成混淆的原因。我删除了Java标记以澄清OP的意图(并收回了我的否决票…)。您的示例不清楚:首先,地图中没有实际对应于pos
中任何值的值,因此此处的预期输出似乎为空(未打印);事实上,在示例数据上运行代码根本不会产生任何打印效果,您的代码可以按预期工作。您能否通过一些实际显示问题的数据澄清问题所在?谢谢您的评论@Tzach。我已经更新了我的帖子,希望这次我能更好的解释。请注意,如果我创建一个简单的映射和列表,您给出的解决方案就可以了,但在我的情况下,它不起作用,我不明白为什么理想情况下应该这样做。