将案例类作为Scala中的密钥的高效映射?
发布时间:2020-12-16 18:14:06 所属栏目:安全 来源:网络整理
导读:以下C代码使用枚举和数组作为从枚举到任何内容的有效“映射”: enum Color { ColorRed,ColorGreen,ColorBlue,ColorSize};void f() { int x[ColorSize]; x[ColorRed] = 12; x[ColorGreen] = 33; x[ColorBlue] = 4; return x[ColorGreen];} 这与Scala有可能吗
以下C代码使用枚举和数组作为从枚举到任何内容的有效“映射”:
enum Color { ColorRed,ColorGreen,ColorBlue,ColorSize}; void f() { int x[ColorSize]; x[ColorRed] = 12; x[ColorGreen] = 33; x[ColorBlue] = 4; return x[ColorGreen]; } 这与Scala有可能吗? 更新:简而言之,我想让某些枚举(案例类或枚举)索引Scala数组. 解决方法
对于小枚举,您可以“模拟”C行为:
abstract sealed class Color(val index: Int) object Color { implicit def col2int(color:Color) = color.index } case object ColorRed extends Color(0) case object ColorGreen extends Color(1) case object ColorBlue extends Color(2) ... import Color._ val array = Array(1,2,3) array(ColorRed) = 12 但是,我怀疑这会被认为是好的风格,特别是因为它不安全.使用地图是一种更好的方法,或者您可以将数组包装在处理Color indizes的专用数据结构中: class ColorArray[T:ClassManifest] { val array = new Array[T] (3) def apply(color: Color) = array(color.index) def update(color: Color,value: T) = array(color.index) = value } ... val cArray = new ColorArray[Int]() cArray(ColorRed) = 12 println(cArray(ColorRed)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – SPARK DataFrame:如何根据相同的列值有效地分割每
- BootStrap 模态框禁用ESC关闭、禁用点击空白处关闭
- Nusoap复杂对象的的webService制作
- scala – 如何在SBT 0.10中声明项目依赖项?
- 如何在Gvim中打开gzip文本文件,而不需要解压缩?
- bash – 从shell脚本编辑属性文件中的属性值
- Webservice soap wsdl区别之个人见解
- angular – WebStorm 2016.3错误:对装饰器的实验支持是一个
- VIM错误:E474:无效的参数:listchars = tab:?·,trail:
- scala – 如何在DataFrame中解开数组(来自JSON)?