Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分字符串并附加到新字符串,但不包含最后一个元素,直到stringlist为空_C#_String_List_Split - Fatal编程技术网

C# 拆分字符串并附加到新字符串,但不包含最后一个元素,直到stringlist为空

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.

我想拆分一个字符串,将其放到列表中,然后将所有项目附加到一个新字符串中,而不包含列表的最后一个元素。此操作应一直执行,直到列表为空

假设我的拆分字符串列表如下所示:

01

02

03

04

然后我希望我的新列表如下所示:

01.02.03

01.02

01

拆分字符串并生成第一个正确的字符串没有问题。问题是如何让循环在没有最后一个元素的情况下“重新开始”,并继续这样做直到列表为空。我已经走了这么远:

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)
相同,但效率较低。