3

私は次のようにList定義しています:

val l = List("1", "2", "3")

文字列に変換したい

"1:2:3"

1 つの方法は次のとおりです。

l.foldLeft("")((x, y) => x + (if (x == "") "" else ":") +y)

もっとエレガントな方法はありますか?

[編集: 詳細説明]

Easy Angel の答えは、要素にl「意味のある」toString方法がある場合に機能します。

私はlasList[String]を持っていますが、次のように、メソッドをlオーバーライドしないカスタムタイプのリストにすることができます:toString

class my(i:Int) {
  val x = i
}

方法もあります

def getMy(m:my) = "Hello "+m.x

したがって、デフォルトメソッドgetMyの出力の代わりに の出力を使用したいと思います。toString

4

3 に答える 3

9

mkString次の方法を使用できますList

l mkString ":"

詳細については、scaladoc を参照してください。

http://www.scala-lang.org/api/rc/scala/collection/Iterable.html#mkString:String


reduceLeft代わりに、たとえば次のように使用できます。

l.reduceLeft(_ + ":" + _)

2番目の質問への答えとして:それを次と組み合わせるだけmapです:

l map getMy mkString ":"
于 2011-02-28T11:49:51.180 に答える
2

foldLeft だけでこれを行う別の方法:

l.tail.foldLeft(l.head)( (x, y) => x+":"+y )
于 2011-02-28T12:07:11.270 に答える
1

他の提案の方が優れていますが、foldLeft を維持したい場合は、オプションを使用できます。

List("1","2","3").foldLeft(None:Option[String])((o,n)=> o.map(_+":"+n).orElse(Some(n))).get
//res2: String = 1:2:3
于 2011-02-28T12:11:28.930 に答える