Scala中支持的不同集合類型(列表,地圖,包含HashMap,設置等),這將是實現一些適當的集合類型,可以用C代碼如下什麼是適合存儲少量元素的集合類型?
typedef enum { GOOD BAD MAX_QUALITY } quality
struct student_data s_data[MAX_QUALITY];
完成集合大小小... 2或3個元素,但是對數據執行類似的操作時,有一個集合有助於保持代碼的優雅。
謝謝!
Scala中支持的不同集合類型(列表,地圖,包含HashMap,設置等),這將是實現一些適當的集合類型,可以用C代碼如下什麼是適合存儲少量元素的集合類型?
typedef enum { GOOD BAD MAX_QUALITY } quality
struct student_data s_data[MAX_QUALITY];
完成集合大小小... 2或3個元素,但是對數據執行類似的操作時,有一個集合有助於保持代碼的優雅。
謝謝!
List
或Seq
不同case classes
應該做的伎倆。當我說不同的case類,我真正的意思:
case class CaseClass1(arg1: String, arg2: Int, arg3: OtherCaseClass)
case class OtherCaseClass(arg1: String, arg2: String)
val foo: List[CaseClass1] = ...
隨後的實例組成,並存儲在您的清單。
你打我吧^^ – Tsagadai
不要忘了[Enums](http://www.scala-lang.org/api/current/scala/Enumeration.html) –
請您詳細闡述一下嗎? 如果你的目的是要建立在你聯想到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)
希望它能幫助。
如果你的目標是創建一個枚舉數據結構,可提供快速的索引查找,我會去:
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
索引。
有關選擇適當集合的更多信息,我建議Josh Seureth的書[Scala in Depth](http://www.amazon.com/Scala-Depth-Joshua-Suereth-D/dp/1935182706)一個標題爲「使用正確的集合」的章節討論了每種集合類型的各種用例和權衡。 – Brian