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



例如:

地图如下:

输出 = 地图(执行 -> 1, () -> 2, 为 -> 1, 在 -> 1, 残酷 -> 1, 每个人 -> 1, 感觉 -> 1, 基督 -> 1, 全部 -> 1, 锯 -> 1, 哭泣 -> 1, 它 -> 1, 两个 -> 1, a -> 2、人-> 1、我-> 3、到-> 1、哭泣-> 1、你-> 1、调谐-> 1、>1、是-> 1、有-> 1、小时-> 1、如何 -> 1、电视转播-> 1、

我-> 1、不是-> 1, 可以 -> 1,是 -> 1,激情 -> 1,我们 -> 1,坐 -> 1,当 -> 1,如 -> 1,> 2 和 -> 1,观看 -> 1,程序 -> 1,-> 3) 类型 [任何,Int]

列表(pos)是从包含大量单词的文件创建的。它可以在肯定词部分找到。为了创建该列表,我使用了以下代码:

val words = """([A-Za-z])+""".r 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) <create a new hashmap>}}

导致意想不到的事情。有些单词即使在 pos 中不存在,也会显示在输出中。

输出代码段如下:

val result = output.filterKeys(pos.contains)

result: 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) 这是打印一些不相关的项目,这些项目甚至不是列表 = pos 的一部分。

像 in,all to 这样的词是意料之外的。

PS:如果在不使用上述代码的情况下创建一个简单的列表(pos),则输出就可以了。

您可以使用map 的filterKeys仅保留pos列表中存在的键,使用pos.contains作为谓词:

val result = output.filterKeys(pos.contains)
result.foreach(println) 

我不知道这是否对您有所帮助。但通常只有原语(布尔值、整数、每个以小写开头的类型)应该与"=="进行比较。所有其他对象都应与 .equals() 进行比较,而 String 就是这样的对象。 也许你只是记住这一点。

在创建列表时使用flatMap造成了问题。

它已通过使用以下代码而不是我之前编写的代码来解决:

val pos = scala.io.Source.fromFile("Positive_words.txt").getLines.drop(35).toList

谢谢。

最新更新