2012-11-16 50 views
1

Scala中支持的不同集合類型(列表,地圖,包含HashMap,設置等),這將是實現一些適當的集合類型,可以用C代碼如下什麼是適合存儲少量元素的集合類型?

typedef enum { GOOD BAD MAX_QUALITY } quality 

struct student_data s_data[MAX_QUALITY]; 

完成集合大小小... 2或3個元素,但是對數據執行類似的操作時,有一個集合有助於保持代碼的優雅。

謝謝!

+0

有關選擇適當集合的更多信息,我建議Josh Seureth的書[Scala in Depth](http://www.amazon.com/Scala-Depth-Joshua-Suereth-D/dp/1935182706)一個標題爲「使用正確的集合」的章節討論了每種集合類型的各種用例和權衡。 – Brian

回答

2

ListSeq不同case classes應該做的伎倆。當我說不同的case類,我真正的意思:

case class CaseClass1(arg1: String, arg2: Int, arg3: OtherCaseClass) 
case class OtherCaseClass(arg1: String, arg2: String) 

val foo: List[CaseClass1] = ... 

隨後的​​實例組成,並存儲在您的清單。

+0

你打我吧^^ – Tsagadai

+0

不要忘了[Enums](http://www.scala-lang.org/api/current/scala/Enumeration.html) –

0

請您詳細闡述一下嗎? 如果你的目的是要建立在你聯想到quality類型的東西student_data類型的數據結構,那麼您可以使用地圖

根據您是否需要可變訪問,或者你只是創建結構,然後結構訪問是隻讀的,你會使用可變或不可變的映射。

我建議,在你的情況下,使用不可變的地圖。 Scala Collection Library爲小地圖提供了專門的版本,最多可插入5個鍵值對,與未經專門處理的地圖類型相比,它們提供更好的性能和內存佔用。

val x = Map(1 -> 2, 2 -> 3) 
println(x.getClass) 
>> class scala.collection.immutable.Map$Map2 

您也可以定義一個別名,與您的結構更輕鬆地工作

type StudentStruct = Map[Quality, StudentData] 

用法:

val studentStruct = Map(Bad -> studentData) 
val studentStruct2 = studentStruct + (Good -> studentData2) 

希望它能幫助。

1

如果你的目標是創建一個枚舉數據結構,可提供快速的索引查找,我會去:

sealed trait Quality { val index: Int } 
case class BAD() extends Quality { val index = 0 } 
case class GOOD() extends Quality { val index = 1 } 
case class MAX_QUALITY() extends Quality { val index = 2 } 

這允許使用模式上的任意quality: Quality和詳細的語法匹配quality.index明確指出質量在此時用作Int索引。

相關問題