Scala 中的有限稀疏集合

Finite sparse collection in Scala

我正在用 Scala 做一个 Base64 转换器,我想存储一组映射到索引的符号(字符)。在 Scala 中,Char 表示是 ASCII 码。但是,此符号集合具有不同的稀疏标识符,即 'A' 对应于 65,“+”对应于 43,并且在这些值之间没有有效符号。

我想做的是将 Base64 符号映射到 Base64 中的索引(即 'A' 为 0),以便解码给定的字符串。我想出了一个通用的简单解决方案:

trait SymbolsTable {
  val symbols: IndexedSeq[Char] = 
    ('A' to 'Z') ++ ('a' to 'z') ++ ('0' to '9') ++ Seq('+', '/')

  val decodingTable: Map[Char, Int] = symbols.zipWithIndex.toMap[Char, Int]
}

因此,我可以获得有效字符的任何索引:

val indexA: Int = table.decodingTable('A')

我只需要存储 64 个符号,我们通常使用 Map 来存储未定义数量的键。我很好奇是否可以使用其他数据结构作为 Vector(以密集方式,不浪费内存)以另一种原始方式完成此操作。

郑重声明,我认为这根本不值得优化,但只是为了好玩,你可以做这样的事情,这在内存方面真的很有效:)

def toBase64(c: Char): Int = c match {
   case '+' => 63
   case '/' => 64
   case x if 'A' to 'Z' contains x => c - 'A'
   case x if 'a' to 'z' contains x => c - 'a' + 26
   case x if '0' to '9' contains x => c - '0' + 52
   case _ => -1
}