如何在Scala中生成A1样式的引用?

时间:2015-06-22 22:14:11

标签: scala

如何在Scala中生成A1样式引用(例如,A1,B1,C1,A2,B2,C2等)。

我可以将两个列表压缩在一起以生成单个元组向量:

"ABCDEFG".zip("1234567")

产生

Vector((A,1), (B,2), (C,3), (D,4), (E,5), (F,6), (G,7), (H,8), (I,9))

但是,尝试在以下错误中将其展平为单个结果列表。

error: No implicit view available from (Char, Char) => scala.collection.GenTraversableOnce[B].

除了解决错误之外,它并没有真正生成所需的A1样式引用列表。如何在Scala中生成A1样式引用列表?

2 个答案:

答案 0 :(得分:3)

zip()没关系,只需正确映射

scala> "ABCDEFG".zip("1234567").map{case (c,r) => c + r.toString}
res0: scala.collection.immutable.IndexedSeq[String] = Vector(A1, B2, C3, D4, E5, F6, G7)

答案 1 :(得分:1)

两个flatMap次调用与我们想要编号的方式相反的顺序解决了这个问题。

"123456789" flatMap { row => 
    "ABCDEFGHI" flatMap { col => 
        Seq(s"${col}${row}")
    }
}  

对问题的一个更简洁的答案使用了理解:

for {
    row <- "123456789"
    col <- "ABCDEFGHI"
} yield s"${col}${row}"

产生一个参考字符串向量:

Vector(A1, B1, C1, ..., G9, H9, I9)