Scala - 如何查找两条或更多条路径的基本路径?

时间:2017-05-17 13:52:31

标签: scala path prefix

给定一系列目录路径,找到最常见的基本目录的最佳方法是什么?

这是我写的代码。

 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("/")
    })
  }

有没有更好的方法呢?

更新

根据对此问题的评论,我更改了代码以解决一些问题:

  1. 过度分裂
  2. 空输入
  3. 其他分隔符
  4. 结束于:

    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库可以完成所有这些,对吧?

0 个答案:

没有答案