加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将案例类作为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有可能吗?
即从case类到某个东西的“map”,实现为高效数组而不是树或hashmap.然而,我希望能够仅使用不使用Int的特定类型进行索引.

更新:简而言之,我想让某些枚举(案例类或枚举)索引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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读