迭代地图的中间三分之一

时间:2013-03-23 02:53:34

标签: scala map loops

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

2 个答案:

答案 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...