85

リスト、Seq、およびタプルのイテレータを頻繁に使用していることに気づき、次のようなことをしたいと考えています。

val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }

ただし、コンパイラはこの構文に決して同意しないようです。代わりに、私は書くことになります、

arrayOfTuples.map { 
    t => 
    val e1 = t._1
    val e2 = t._2
    e1.toString + e2 
}

これはばかげています。どうすればこれを回避できますか?

4

6 に答える 6

143

回避策は次を使用することcaseです:

arrayOfTuples map {case (e1: Int, e2: String) => e1.toString + e2}
于 2011-08-01T22:26:10.023 に答える
33

私はtupled関数が好きです。便利であり、特にタイプセーフです。

import Function.tupled
arrayOfTuples map tupled { (e1, e2) => e1.toString + e2 }
于 2011-08-02T10:32:28.900 に答える
18

使わない理由

arrayOfTuples.map {t => t._1.toString + t._2 }

パラメータが複数回、または異なる順序で必要な場合、またはネストされた構造で _ が機能しない場合は、

arrayOfTuples map {case (i, s) => i.toString + s} 

短いが読みやすい形式のようです。

于 2011-08-02T06:03:56.463 に答える
8

別のオプションは

arrayOfTuples.map { 
    t => 
    val (e1,e2) = t
    e1.toString + e2
}
于 2011-08-01T22:39:11.647 に答える