在基于分隔符的迭代循环中构建子字符串

本文关键字:构建 字符串 循环 迭代 分隔符 | 更新日期: 2023-09-27 18:12:10

我是C#的新手,遇到了麻烦。

我有这个字符串与'/'分隔符:"1/2/10/4"

我在循环中迭代时需要使用的字符串应该是这样的:

i = 1; "1"
i = 2; "1/2"
i = 3; "1/2/10"
i = 4; "1/2/10/4"  

它应该被整合在这里,但是我不知道怎么做:

        var IDArray = Convert.ToString(NodesID).Split('/');
        for (int i = 0; i < Convert.ToString(NodesID).Count(x => x == '/')+2; i++)
        {
            string IDCheck = IDArray[i];
            string ???
        }

在基于分隔符的迭代循环中构建子字符串

var IDArray = Convert.ToString(NodesID).Split('/');
var builder = new StringBuilder();
for (int i = 0; i < IDArray.Length; i++)
{
    builder.Append(IDArray[i]);
    var stringToUse = builder.ToString();
    //...
    //Use the stringToUse here. It contains exactly what you want.
    //...
    builder.Append("/");
}

一切都不言自明。如果有什么地方你不太明白(或者如果我没有正确地解释你的问题),请告诉我。

我建议使用一个helper方法,它将生成您正在寻找的所有子路径。像这样的代码应该可以工作:

public IEnumerable<string> GetSubPaths(string s)
{
    var sb = new StringBuilder();
    for(int i = 0; i < s.Length; s++)
    {
        if(s[i] == '''')
            yield return sb.ToString();
        sb.Append(s[i]);
    }
    yield return sb.ToString();
}

这个方法使用了一个叫做yield return的c#技巧,它使它返回一个IEnumerable<>,其中每个元素都是基于提供给yield return的内容。因此,返回的IEnumerable<>中的元素将表示您正在描述的每个子字符串组。

然后你可以随意使用这个方法的结果:

var subPaths = GetSubPaths("1/2/10/4").ToList();
for(int i = 0; i < subPaths.Count; i++)
{
    Console.Write("i = " + i + "; ");
    Console.WriteLine(subPaths[i]);
}

不完全是最易读的代码,但一个简洁的解决方案是:

var list = YourInput.Split('/').Aggregate(new List<string>(), (l, el) => { l.Add(l.Count == 0 ? el : l[l.Count - 1] + "/" + el); return l; });

这将创建一个字符串列表