相关疑难解决方法(0)

查找字符串的公共前缀

我有4个字符串:

"h:/a/b/c"
"h:/a/b/d"
"h:/a/b/e"
"h:/a/c"
Run Code Online (Sandbox Code Playgroud)

我想找到这些字符串的公共前缀,即"h:/a".怎么找到?

通常我会用分隔符拆分字符串'/'并将其放在另一个列表中,依此类推.
有没有更好的方法呢?

c# string pattern-matching

26
推荐指数
5
解决办法
2万
查看次数

在文件和目录列表中查找公共父路径

我有一个文件和目录列表List<string> pathes.现在我想计算每个路径彼此共享的最深的公共分支.

我们可以假设它们都有共同的路径,但这在开始时是未知的.

假设我有以下三个条目:

  • C:/Hello/World/This/Is/An/Example/Bla.cs
  • C:/你好/世界/这/是/不是/ AN /示例/
  • C:/您好/地球/ BLA/BLA/BLA

这应该得到结果:C:/ Hello /因为地球正在打破子目录的这个"链".

第二个例子:

  • C:/Hello/World/This/Is/An/Example/Bla.cs
  • C:/你好/世界/这/是/不是/ AN /示例/

- > C:/ Hello/World/This/Is /

你会怎么做?我尝试使用string.split(@"/")并从第一个字符串开始,并检查此数组的每个部分是否包含在其他字符串中.但是,这将是一个非常昂贵的调用,因为我正在迭代(list_of_entries)^ list_of_entries.有没有更好的解决方案?

我目前的尝试将类似于以下(C#+ LINQ):

    public string CalculateCommonPath(IEnumerable<string> paths)
    {
        int minSlash = int.MaxValue;
        string minPath = null;
        foreach (var path in paths)
        {
            int splits = path.Split('\\').Count();
            if (minSlash > splits)
            {
                minSlash = splits;
                minPath = path;
            }
        }

        if (minPath != null)
        {
            string[] splits = minPath.Split('\\');
            for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c# string url utility-method

8
推荐指数
2
解决办法
4116
查看次数

标签 统计

c# ×2

string ×2

pattern-matching ×1

url ×1

utility-method ×1