1

我有一个 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
        }
    }
4

2 回答 2

5

您可以使用该方法slice(from: Int, until: Int),然后只迭代排序地图的中间三分之一。就像是

val mapSize = sortedMap.size
for ((key, value) <- sortedMap.slice(mapSize/3, 2*mapSize/3)) {
  ...
}

请注意,这仅在对基础地图进行排序时才可靠(在您的示例中似乎就是这种情况)。您可能还需要稍微调整索引计算,具体取决于您认为大小不能被 3 整除的地图的中间三分之一。

于 2013-03-23T03:23:27.537 回答
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...
于 2013-03-23T03:22:55.783 回答