Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将映射中的键与列表中的每个字符串进行比较,如果匹配,则将其与旧映射中的对应值存储在新映射中_Scala_List_Hashmap - Fatal编程技术网

Scala 将映射中的键与列表中的每个字符串进行比较,如果匹配,则将其与旧映射中的对应值存储在新映射中

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,类型为

例如:

地图如下:

输出=映射(执行->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)是从包含大量单词的文件创建的。它可以在积极的词语部分找到。为了创建该列表,我使用了以下代码:

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。我已经更新了我的帖子,希望这次我能更好的解释。请注意,如果我创建一个简单的映射和列表,您给出的解决方案就可以了,但在我的情况下,它不起作用,我不明白为什么理想情况下应该这样做。