web-dev-qa-db-ja.com

seqから不変のマップ/セットを作成するにはどうすればよいですか?

Seqから不変のセット/マップを作成しようとしています。私は現在、次のことを行っています。

val input: Seq[(String, Object)] = //.....
Map[String, Object]() ++ input

とセットの場合

val input: Seq[String] = //.....
Set[String]() ++ input

少し複雑に思えますが、もっと良い方法はありますか?

28
Michael Barker

In Scala 2.8:

Welcome to Scala version 2.8.0.r20327-b20091230020149 (Java HotSpot(TM) Client VM, Java 1.6.
Type in expressions to have them evaluated.
Type :help for more information.

scala> val seq: Seq[(String,Object)] = ("a","A")::("b","B")::Nil
seq: Seq[(String, Java.lang.Object)] = List((a,A), (b,B))

scala> val map = Map(seq: _*)
map: scala.collection.immutable.Map[String,Java.lang.Object] = Map(a -> A, b -> B)

scala> val set = Set(seq: _*)
set: scala.collection.immutable.Set[(String, Java.lang.Object)] = Set((a,A), (b,B))

scala>

2010.1.12を編集

セットを作成するもっと簡単な方法があることがわかりました。

scala> val seq: Seq[(String,Object)] = ("a","A")::("b","B")::Nil
seq: Seq[(String, Java.lang.Object)] = List((a,A), (b,B))

scala> val set = seq.toSet
set: scala.collection.immutable.Set[(String, Java.lang.Object)] = Set((a,A), (b,B))
28
Eastsun

SeqMapに変換するには、toMapSeqを呼び出すだけです。 Seqの要素はTuple2でなければならないことに注意してください。 (X,Y)または(X->Y)

scala> val seq: Seq[(String,String)] = ("A","a")::("B","b")::("C","c")::Nil
seq: Seq[(Java.lang.String, Java.lang.String)] = List((A,a), (B,b), (C,c))

scala> seq.toMap
res0: scala.collection.immutable.Map[Java.lang.String,Java.lang.String] = Map((A,a), (B,b), (C,c))

SeqSetに変換するには、toSetSeqを呼び出すだけです。

scala> val seq: Seq[String] = "a"::"b"::"c"::Nil
seq: Seq[Java.lang.String] = List(a, b, c)

scala> seq.toSet
res1: scala.collection.immutable.Set[Java.lang.String] = Set(a, b, c)
16
Chris Stivers