此类采用 [String , List[String]] 类型的 Map 并输出 [String, String] 的 Map,其中键是 List 的名称,值是字母的二进制表示。每个数字对应于字母是否出现在列表中。1 - 出现,0 - 不出现。例如这个列表:
1 = 1,1,0,0
2 = 1,1,1,0
3 = 1,1,0,1
4 = 1,1,0,0
Returns
4-->1100
1-->1100
2-->1110
3-->1101
下面是一个迭代解决方案:
object BinaryRep {
var userDetails : scala.collection.immutable.HashMap[String, List[String]] = new scala.collection.immutable.HashMap[String, List[String]]
var lettersToCheck = List("a" , "b" , "c" ,"d")
def main(args: Array[String]) {
userDetails += "1" -> List("a" , "b")
userDetails += "2" -> List("a" , "b" , "c")
userDetails += "3" -> List("a" , "b" , "d")
userDetails += "4" -> List("a" , "b")
val binRep = getBinaryRepresentation
getBinaryRepresentation foreach ( (t2) => println (t2._1 + "-->" + t2._2))
}
def getBinaryRepresentation = {
var mapvalues = new scala.collection.immutable.HashMap[String, String]
var binaryRep = "";
for (usd <- userDetails) {
for (letter <- lettersToCheck) {
if (usd._2.contains(letter)) {
binaryRep += "1"
} else {
binaryRep += "0";
}
}
mapvalues += usd._1 -> binaryRep
binaryRep = "";
}
mapvalues
}
}
我认为这很混乱,但这是我能做的最好的。有什么更实用的方法来完成相同的结果?