C# 拆分字符串并附加到新字符串,但不包含最后一个元素,直到stringlist为空
我想拆分一个字符串,将其放到列表中,然后将所有项目附加到一个新字符串中,而不包含列表的最后一个元素。此操作应一直执行,直到列表为空 假设我的拆分字符串列表如下所示: 01 02 03 04 然后我希望我的新列表如下所示: 01.02.03 01.02 01 拆分字符串并生成第一个正确的字符串没有问题。问题是如何让循环在没有最后一个元素的情况下“重新开始”,并继续这样做直到列表为空。我已经走了这么远:C# 拆分字符串并附加到新字符串,但不包含最后一个元素,直到stringlist为空,c#,string,list,split,C#,String,List,Split,我想拆分一个字符串,将其放到列表中,然后将所有项目附加到一个新字符串中,而不包含列表的最后一个元素。此操作应一直执行,直到列表为空 假设我的拆分字符串列表如下所示: 01 02 03 04 然后我希望我的新列表如下所示: 01.02.03 01.02 01 拆分字符串并生成第一个正确的字符串没有问题。问题是如何让循环在没有最后一个元素的情况下“重新开始”,并继续这样做直到列表为空。我已经走了这么远: var separator = "."; var listOfStrings = "01.02.
var separator = ".";
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
string newString;
foreach(var item in separatedStringList)
{
if(separatedStringList.Last != item){
newString += item;
}
}
您可以在此处使用LINQ的
Take
方法:
for (int i = separatedStringList.Count - 1; i--; i > 0)
{
newString = String.Join(".", separatedStringList.Take(i).ToArray());
Console.WriteLine(newString);
}
我不确定您是想要单独的字符串还是跨越多行的字符串(或者字符串列表?)。我的答案很可能无法解决您的问题,但它可能是一个很好的起点。您可以在此处使用LINQ的
Take
方法:
for (int i = separatedStringList.Count - 1; i--; i > 0)
{
newString = String.Join(".", separatedStringList.Take(i).ToArray());
Console.WriteLine(newString);
}
我不确定您是想要单独的字符串还是跨越多行的字符串(或者字符串列表?)。我的答案很可能不会解决您的问题,但它可能是一个很好的起点。没有任何问题:
var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new List<string>();
//take "01"
var temp = separatedStringList[0];
//add "01" to list
result.Add(temp);
if(separatedStringList.Count > 1)
{
//loop through second till last
for(int i = 1; i < separatedStringList.Count - 1; i++)
{
//make temp "01.02" then "01.02.03"
temp += "." + separatedStringList[i];
//add temp to list
result.Add(temp);
}
}
var分隔符=';
var listOfStrings=“01.02.03.04”;
var separatedStringList=listOfStrings.Split(separator.ToList();
var result=新列表();
//以“01”为例
var temp=分离的StringList[0];
//将“01”添加到列表中
结果。添加(温度);
如果(separatedStringList.Count>1)
{
//从第二个循环到最后一个
for(int i=1;i
对于相反方向:
var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new string[separatedStringList.Count - 1];
var temp = separatedStringList[0];
result[result.Length - 1] = temp;
for (int i = 1; i < separatedStringList.Count - 1; i++)
{
temp += "." + separatedStringList[i];
result[result.Length - i - 1] = temp;
}
var分隔符=';
var listOfStrings=“01.02.03.04”;
var separatedStringList=listOfStrings.Split(separator.ToList();
var result=新字符串[separatedStringList.Count-1];
var temp=分离的StringList[0];
结果[结果长度-1]=温度;
for(int i=1;i
没有发现任何问题:
var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new List<string>();
//take "01"
var temp = separatedStringList[0];
//add "01" to list
result.Add(temp);
if(separatedStringList.Count > 1)
{
//loop through second till last
for(int i = 1; i < separatedStringList.Count - 1; i++)
{
//make temp "01.02" then "01.02.03"
temp += "." + separatedStringList[i];
//add temp to list
result.Add(temp);
}
}
var分隔符=';
var listOfStrings=“01.02.03.04”;
var separatedStringList=listOfStrings.Split(separator.ToList();
var result=新列表();
//以“01”为例
var temp=分离的StringList[0];
//将“01”添加到列表中
结果。添加(温度);
如果(separatedStringList.Count>1)
{
//从第二个循环到最后一个
for(int i=1;i
对于相反方向:
var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new string[separatedStringList.Count - 1];
var temp = separatedStringList[0];
result[result.Length - 1] = temp;
for (int i = 1; i < separatedStringList.Count - 1; i++)
{
temp += "." + separatedStringList[i];
result[result.Length - i - 1] = temp;
}
var分隔符=';
var listOfStrings=“01.02.03.04”;
var separatedStringList=listOfStrings.Split(separator.ToList();
var result=新字符串[separatedStringList.Count-1];
var temp=分离的StringList[0];
结果[结果长度-1]=温度;
for(int i=1;i
您可以执行以下操作以获取字符串列表
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split('.').ToList();
var list =
Enumerable.Range(1, separatedStringList.Count - 1)
.Select(i => string.Join(".", separatedStringList.Take(i)))
.ToList();
foreach(var s in list) Console.WriteLine(s);
这将输出
01
01.02
01.02.03
如果您想让它们按顺序排列,只需在
ToList()
之前插入一个Reverse()
,或者将传递到Take
的参数从i
更改为separatedStringList.Count-i
即可获得字符串列表
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split('.').ToList();
var list =
Enumerable.Range(1, separatedStringList.Count - 1)
.Select(i => string.Join(".", separatedStringList.Take(i)))
.ToList();
foreach(var s in list) Console.WriteLine(s);
var listOfStrings = "01.02.03.04";
var arr = listOfStrings.Split(new char[] { '.' });
List<string> results = new List<string>();
for (int i = 1; i < arr.Length; i++)
{
var str = String.Join(".", arr.Reverse().Skip(i).Reverse());
results.Add(str);
}
这将输出
01
01.02
01.02.03
如果您想让它们按oppisite顺序排列,只需在ToList()
之前插入一个Reverse()
,或者将传递到Take
的参数从i
更改为separatedStringList.Count-i
var-listofstring=“01.02.03.04”;
var listOfStrings = "01.02.03.04";
var arr = listOfStrings.Split(new char[] { '.' });
List<string> results = new List<string>();
for (int i = 1; i < arr.Length; i++)
{
var str = String.Join(".", arr.Reverse().Skip(i).Reverse());
results.Add(str);
}
var arr=listOfStrings.Split(新字符[]{.'});
列表结果=新列表();
对于(int i=1;i
编辑:
for(int i=1;i
var listOfStrings=“01.02.03.04”;
var arr=listOfStrings.Split(新字符[]{.'});
列表结果=新列表();
对于(int i=1;i
编辑:
for(int i=1;i
为什么LINQ没有像F#那样的扫描功能,我永远也不知道:list |>Seq.scan”“(+)|>list.rev)@AdamKewley我不熟悉F#,但我知道一些Haskell。查看scan
的文档,我同意您的看法。我想象它可以做到的方式正好是你发布的:)为什么LINQ没有一个像F#那样的scan
函数,我永远也不知道:list |>Seq.scan”“(+)\list.rev)@AdamKewley我不熟悉F#,但我知道一些Haskell。查看scan
的文档,我同意您的看法。我想象它可以做到的方式正是你发布的:)这也是我应该回答的,在这种情况下,foreach只是让人困惑。这里是一个简单的for循环。Reverse().Skip(i)。Reverse()
与Take(arr.Length-i)
相同,但效率较低。我也会回答这个问题,在这种情况下,foreach只是让人困惑。这里的方法是使用一个简单的for循环。Reverse().Skip(i)。Reverse()
与Take(arr.Length-i)
相同,但效率较低。