【问题标题】:Iterate over middle third of map迭代地图的中间三分之一
【发布时间】:2013-03-23 02:53:33
【问题描述】:

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

【问题讨论】:

    标签: scala map loops


    【解决方案1】:

    您可以使用slice(from: Int, until: Int) 方法,然后只遍历已排序映射的中间三分之一。类似的东西

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

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

    【讨论】:

      【解决方案2】:

      您可以将地图转换为流,修改流以删除前三分之一和后三分之一,然后遍历剩余的中间三分之一。

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

      【讨论】:

        猜你喜欢
        • 2016-02-12
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        相关资源
        最近更新 更多