2

此类采用 [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

  }


}

我认为这很混乱,但这是我能做的最好的。有什么更实用的方法来完成相同的结果?

4

1 回答 1

2
import scala.collection.immutable.HashMap

object BinaryRep {
  val userDetails = HashMap("1" -> "ab",
                            "2" -> "abc",
                            "3" -> "abd",
                            "4" -> "ab")
  val lettersToCheck = "abcd"
  def getBinaryRepresentation = userDetails.mapValues(string => lettersToCheck.map(letter => if (string.contains(letter)) '1' else '0'))

  getBinaryRepresentation foreach ( (t2) => println (t2._1 + "-->" + t2._2))
}

像这样的数据转换几乎总是可以通过一系列map调用来实现。

于 2013-08-28T21:59:09.060 回答