注意标题并不能完全反映出我需要做的事情,但由于我的英语不够完美,我无法找到正确的字词。如果有人想要纠正它,请随意。
给定一个包含组的字符串(由n个点分隔)我想得到所有值:group [0];组[0]。集团[1];组[0]。集团[1] ..组[N]。
示例:输入:string input = "Tr.WH.Eu6.ISC";
string[] splitStrings = input.Split('.');
List<string> subs = new List<string> { "" };
for (int i = 0; i < splitStrings.Count(); i++)
{
subs.Add(subs.Last() + "." + splitStrings[i]);
}
subs.Remove("");
会给出:
现在我有了这段代码:
gson.fromJson
我发现它很难看,并且在输出时没有完全发挥作用:
如何使其有效(最好使用Linq)?
答案 0 :(得分:6)
使用LINQ:
string input = "Tr.WH.Eu6.ISC";
string[] groups = input.Split('.');
string[] output = groups.Select((x, idx) => string.Join(".", groups.Take(idx + 1)))
.ToArray();
对于每个组,其中idx是组的索引,从组集合中获取(idx + 1)条目,并将它们与&#34;连接起来。&#34;分隔符。
答案 1 :(得分:3)
我不知道在Linq
中完全执行此操作的方法,但您可以使用String.Join
和.Take
(来自Linq)清理代码。
string input = "Tr.WH.Eu6.ISC";
string[] splitStrings = input.Split('.');
List<string> subs = new List<string>();
for (int i = 1; i <= splitStrings.Count(); i++)
{
subs.Add(String.Join(".", splitStrings.Take(i).ToArray()));
}
答案 2 :(得分:1)
试试这个:
var v = str.Split('.');
for(int i=0;i<v.Count();i++)
{
Console.WriteLine(string.Join(".", v.Take(i+1)));
}
我们仍采用Split
方法,然后在循环中使用Join
和Take
,以便每次都显示越来越多的细分。
另一种方式:
var v = str.Split('.');
Enumerable.Range(1,v.Count()).ToList().ForEach(x => Console.WriteLine(string.Join(".", v.Take(x))));
答案 3 :(得分:0)
没有LINQ。将字符串拆分成数组然后加入 - 它不是内存有效的代码。
static IEnumerable<string> SplitIntoGroups(string s, char delimiter)
{
for (int findPos = 0, delimPos = 0;
(delimPos = s.IndexOf(delimiter, findPos)) != -1;
findPos = delimPos + 1)
{
yield return s.Substring(0, delimPos);
}
yield return s;
}