I am try to construct immutable Sets/Maps from a Seq. I am currently doing the following:
val input: Seq[(String, Object)] = //..... Map[String, Object]() ++ input
and for sets
val input: Seq[String] = //..... Set[String]() ++ input
Which seems a little convoluted, is there a better way?
Seq is immutable — Once a Seq is created, it cannot be changed, appended to, rearranged or otherwise modified.
Seq which represents sequences that are guaranteed immutable.
If you just want a mutable HashMap , you can just use x. toMap in 2.8 or collection. immutable. Map(x.
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>
Edit 2010.1.12
I find that there is a more simple way to create set.
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))
To convert a Seq
to a Map
, simply call toMap
on the Seq
. Note that the elements of the Seq
must be Tuple2
ie. (X,Y)
or (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))
To convert a Seq
to a Set
, simply call toSet
on the Seq
.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With