基于定界符在迭代循环中构建子字符串
Substring build in iteration loop based on delimiters
我是 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 ???
}
我建议使用一种辅助方法,它会产生您正在寻找的所有子路径。这样的事情应该有效:
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# 技巧,它导致它成为 return 和 IEnumerable<>
,其中每个元素都基于提供给 yield return
的内容。因此,此 returned 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]);
}
不是最易读的代码,但 linqy 解决方案是:
var list = YourInput.Split('/').Aggregate(new List<string>(), (l, el) => { l.Add(l.Count == 0 ? el : l[l.Count - 1] + "/" + el); return l; });
这将创建一个包含字符串的列表。
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("/");
}
一切都是不言自明的。让我知道您是否有什么不太理解的地方(或者如果我未能正确解释您的问题)。
我是 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 ???
}
我建议使用一种辅助方法,它会产生您正在寻找的所有子路径。这样的事情应该有效:
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# 技巧,它导致它成为 return 和 IEnumerable<>
,其中每个元素都基于提供给 yield return
的内容。因此,此 returned 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]);
}
不是最易读的代码,但 linqy 解决方案是:
var list = YourInput.Split('/').Aggregate(new List<string>(), (l, el) => { l.Add(l.Count == 0 ? el : l[l.Count - 1] + "/" + el); return l; });
这将创建一个包含字符串的列表。
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("/");
}
一切都是不言自明的。让我知道您是否有什么不太理解的地方(或者如果我未能正确解释您的问题)。