2010-01-01 6 views

Trả lời

27

Trong 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> 

Sửa 2010.1.12

tôi thấy rằng có một cách đơn giản hơn để tạo ra những thiết lập.

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)) 
+1

'bản đồ val = Map (seq: _ *) 'đã cho tôi rằng "cảm giác scala" trong dạ dày của tôi một lần nữa :) Cảm ơn –

+4

Chết đuối trong dấu gạch dưới và ký tự đặc biệt nói chung? – ziggystar

+3

Hãy nhìn vào câu trả lời của Chris có tính năng toMap ngoài toSet. – ziggystar

16

Để chuyển đổi một Seq đến một Map, chỉ cần gọi toMap trên Seq. Lưu ý rằng các phần tử của Seq phải là Tuple2 tức là. (X,Y) hoặc (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)) 

Để chuyển đổi một Seq đến một Set, chỉ cần gọi toSet trên 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)