scala 如何从序列创建不可变的映射/集?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1988574/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-22 01:48:45  来源:igfitidea点击:

How to create an immutable map/set from a seq?

scalaimmutability

提问by Michael Barker

I am try to construct immutable Sets/Maps from a Seq. I am currently doing the following:

我试图从 Seq 构造不可变的 Sets/Maps。我目前正在做以下事情:

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?

这似乎有点令人费解,有没有更好的方法?

回答by Eastsun

In Scala 2.8:

在 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

编辑 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))

回答by Chris Stivers

To convert a Seqto a Map, simply call toMapon the Seq. Note that the elements of the Seqmust be Tuple2ie. (X,Y)or (X->Y)

要转换SeqMap,简单地调用toMapSeq。请注意, 的元素Seq必须是Tuple2ie。(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))

To convert a Seqto a Set, simply call toSeton the Seq.

要转换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)