存储少量元素的适当集合类型是什么?

时间:2012-11-16 00:49:47

标签: scala collections enums

Scala支持的不同集合类型(列表,映射,哈希映射,集合等),用于实现可以通过下面的C代码完成的东西的适当集合类型

typedef enum { GOOD BAD MAX_QUALITY } quality

struct student_data s_data[MAX_QUALITY];

集合大小很小...... 2或3个元素,但是在对数据执行类似操作时,拥有集合有助于保持代码的优雅。

谢谢!

3 个答案:

答案 0 :(得分:2)

不同List

Seqcase classes应该可以解决问题。当我说不同的案例类时,我的意思是:

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

val foo: List[CaseClass1] = ...

然后CaseClass1的实例组成并存储在您的列表中。

答案 1 :(得分: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索引。

答案 2 :(得分: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)

希望它有所帮助。

相关问题