2012-02-01 89 views
3

我一直在尋找一點時間,如何將ArrayBuffer轉換爲SetHashSet我想是準確的。任何提示?scala:如何將ArrayBuffer轉換爲Set?

+2

搜索是您在scaladoc上的朋友。如果你在方法列表中鍵入「set」,你會得到一個13個方法的列表,在那裏更容易找到'toSet'。 – 2012-02-02 14:23:25

回答

8

有一個toSet函數中實現ArrayBuffer

實施例:

scala> import collection.mutable.ArrayBuffer 
import collection.mutable.ArrayBuffer 

scala> import collection.immutable.HashSet 
import collection.immutable.HashSet 

scala> val a = new ArrayBuffer(2) 
a: scala.collection.mutable.ArrayBuffer[Nothing] = ArrayBuffer() 

scala> val b = a.toSet 
b: scala.collection.immutable.Set[Nothing] = Set() 
+0

瘋了,我看着scaladoc但錯過了它和日食並不想自動完成我的最後一個數組,以便能夠弄清楚如何轉換它 非常感謝 – 2012-02-01 22:46:06

3

來設置:

scala> val bf = ArrayBuffer(1,2,3,4) 
bf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4) 
scala> bf.toSet 
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4) 

要HashSet的:

scala> val hs = new HashSet[Int]++ bf.toSet 
hs: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3, 4) 
+0

+1好的答案,但不是那些行錯誤的順序? – DNA 2012-02-01 22:36:21

+0

@DNA是的,他們是:)我糾正了那個錯誤 – 2012-02-01 22:37:37

+1

第二個例子是多餘的。它們幾乎完全相同,除了'toSet'將少於5個元素用於'Set's而不是'HashSet'的特殊類:'ArrayBuffer(1,2,3,4).toSet.isInstanceOf [ HashSet [_]] == false','ArrayBuffer(1,2,3,4,5).toSet.isInstanceOf [HashSet [_]] == true' – soc 2012-02-02 14:07:09

2

爲了完整起見,還有一種方法:

scala> import collection.mutable.ArrayBuffer 
import collection.mutable.ArrayBuffer 

scala> val as = ArrayBuffer(34, 89, 11) 
as: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(34, 89, 11) 

scala> Set(as: _*) 
res13: scala.collection.immutable.Set[Int] = Set(34, 89, 11) 
+0

我試過這個Set(array:_ *),但由於某些原因它沒有工作。很高興看到它應該有:) – 2012-02-03 23:30:13

相關問題