代码之家  ›  专栏  ›  技术社区  ›  davetron5000

相当于Ruby地图的scala。

  •  11
  • davetron5000  · 技术社区  · 15 年前

    非常方便的Ruby代码:

    some_map.each do |key,value|
      # do something with key or value
    end
    

    scala当量:

    someMap.foreach( entry => {
      val (key,value) = entry
      // do something with key or value
    })
    

    必须增加额外的 val 我讨厌。我不知道如何声明函数arg来提取元组,所以我想知道是否有一种方法可以这样做,或者为什么没有foreach来为我提取密钥和值?

    4 回复  |  直到 15 年前
        1
  •  19
  •   sepp2k    15 年前

    这也适用于:

    someMap.foreach {case (key, value) =>
      // do something with key and/or value
    }
    
        2
  •  11
  •   Viktor Klang    15 年前

    我喜欢这个:

    scala> val foo = Map( 1 -> "goo", 2 -> "boo" )
    foo: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> goo, 2 -> boo)
    
    scala> for ((k,v) <- foo) println(k + " " + v)
    1 goo
    2 boo
    
        3
  •  5
  •   andri    15 年前

    你甚至不需要 val for循环:

    以下是维克托克兰的例子:

    scala> val foo = Map( 1 -> "goo", 2 -> "boo" )
    foo: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> goo, 2 -> boo)
    
    scala> for ((k, v) <- foo) println(k + " " + v)
    1 goo
    2 boo
    

    注意 for 在scala中相当强大,因此您也可以将其用于 sequence comprehensions :

    scala> val bar = for (val (k, v) <- foo) yield k
    bar: Iterable[Int] = ArrayBuffer(1, 2)
    
        4
  •  2
  •   Thomas Jung    15 年前

    function.tupled转换函数 (a1, a2) => b) 到一个函数 ((a1, a2)) => b .

    import Function._
    someMap foreach tupled((key, value) => printf("%s ==> %s\n", key, value))