给定一系列目录路径,找到最常见的基本目录的最佳方法是什么?
这是我写的代码。
def commonPrefix(paths: String*): String = {
paths.reduce((left: String, right: String) => {
left.split('/')
.zip(right.split('/'))
.takeWhile((tuple: (String, String)) => tuple._1.equals(tuple._2))
.map(_._1).mkString("/")
})
}
有没有更好的方法呢?
根据对此问题的评论,我更改了代码以解决一些问题:
结束于:
def commonPrefix(paths: String*)(implicit separator: Char = '/'): String = {
paths.map(s => s.split(separator))
.reduceOption((left: Array[String], right: Array[String]) => {
left
.zip(right)
.takeWhile(tuple => tuple._1.equals(tuple._2))
.map(_._1)
}).getOrElse(Array[String]())
.mkString("/")
}
我选择使用reduceOption
而不是将签名更改为commonPrefix(path: String, paths: String*)
,因为我可以使用以下语法:
val paths = Seq("/a/b", "/a/c")
val baseDir = commonPrefix(paths:_*)
现在对我好看。
我想现在没有现有的Java / Scala库可以完成所有这些,对吧?