在 Scala 支持的不同集合类型(列表、映射、哈希映射、集合等)中,什么是合适的集合类型,用于实现可以通过下面的 C 代码完成的事情
typedef enum { GOOD BAD MAX_QUALITY } quality
struct student_data s_data[MAX_QUALITY];
集合大小很小...... 2 或 3 个元素,但在对数据执行类似操作时,拥有一个集合有助于保持代码优雅。
谢谢!
在 Scala 支持的不同集合类型(列表、映射、哈希映射、集合等)中,什么是合适的集合类型,用于实现可以通过下面的 C 代码完成的事情
typedef enum { GOOD BAD MAX_QUALITY } quality
struct student_data s_data[MAX_QUALITY];
集合大小很小...... 2 或 3 个元素,但在对数据执行类似操作时,拥有一个集合有助于保持代码优雅。
谢谢!
List
或Seq
不同的case classes
应该做的伎俩。当我说不同的案例类别时,我的真正意思是:
case class CaseClass1(arg1: String, arg2: Int, arg3: OtherCaseClass)
case class OtherCaseClass(arg1: String, arg2: String)
val foo: List[CaseClass1] = ...
然后 的实例CaseClass1
被组合并存储在您的列表中。
如果您的目标是创建一个提供快速索引查找的类似枚举的数据结构,我会选择:
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
该点的索引。
您能否进一步详细说明?如果您的意图是创建与某种类型quality
的数据结构相关联的结构,student_data
那么您可以使用 Map
根据您是否需要可变访问,或者您只是创建结构然后访问是只读的,您将使用可变或不可变映射。
在您的情况下,我建议使用不可变的地图。Scala 集合库为小型映射提供了专门的版本,最多可插入 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)
希望能帮助到你。