我正在做Scala中的Base64转换器,我想存储映射到索引的符号集(字符)。在Scala中,Char表示是ASCII码。然而,这个符号集合具有不同的稀疏标识符,即'A'对应于65,'+'对应于43,并且在这些值之间没有有效符号。Scala中的有限稀疏集合
我想要做的是将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个符号和我们平时使用的地图存储的未定义的键数量。我很好奇,如果这可以以另一种原始的方式使用其他数据结构作为Vector(以密集的方式,而不浪费内存)来完成。
稀疏集合存在于https://github.com/non/spire中,尽管其他解决方案可能对此特定任务更好。 –
你认为哪一个更好? –
我会去现有的图书馆。我猜这里有(http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Decoder.html)在JVM上非常好 - 已经过优化,经过测试的解决方案,但可能你有不同的要求。 –