我有一个scala Map[String, String]
,我只是将一部分键与其值相比较,仅用于地图的三分之一。由于在地图中使用索引进行迭代并不容易,所以我提出了以下内容,但它不起作用。
var i = 0
var j = 0
val mapSize = sortedMap.size/3
for((key,value) <- sortedMap) {
j+=1
if((i < 3) && (key.split(' ').take(1).mkString==value)&&(j>mapSize)){
Accuracy += 1
i += 1
}
}
答案 0 :(得分:5)
您可以使用方法slice(from: Int, until: Int)
,然后只迭代排序地图的中间三分之一。像
val mapSize = sortedMap.size
for ((key, value) <- sortedMap.slice(mapSize/3, 2*mapSize/3)) {
...
}
请注意,只有在对基础地图进行排序时这才是可靠的(在您的示例中似乎就是这种情况)。您也可能需要稍微调整索引计算,具体取决于您认为中间三分之一的地图的大小不能被3整除。
答案 1 :(得分:1)
您可以将地图转换为流,修改流以删除前三分之一和最后三分之一,然后迭代剩余的中间三分之一。
val middle = sortedMap.toStream.drop(sortedMap.size / 3).dropRight(sortedMap.size / 3)
middle.foreach(println _) // replace println with your key test
对于关键测试,您可以使用
上的模式匹配case key if key.split(' ')(0) == value => ...do something...