Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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# 在C中使用lambdas在一个数组上执行多个函数_C#_String_Lambda - Fatal编程技术网

C# 在C中使用lambdas在一个数组上执行多个函数

C# 在C中使用lambdas在一个数组上执行多个函数,c#,string,lambda,C#,String,Lambda,我有一个字符串,我想在一个特定的分隔符上拆分它,然后从每个成员中删除起始和结尾的空格。当前代码如下所示: string s = "A, B, C ,D"; string[] parts = s.Split(','); for(int i = 0; i++; i< parts.Length) { parts[i] = parts[i].Trim(); } 我最近一直在使用Python,我想这正是我重新思考如何使用C语言解决问题的原因。关于: string[] parts = s.

我有一个字符串,我想在一个特定的分隔符上拆分它,然后从每个成员中删除起始和结尾的空格。当前代码如下所示:

string s = "A, B, C ,D";
string[] parts = s.Split(',');
for(int i = 0; i++; i< parts.Length)
{
     parts[i] = parts[i].Trim();
}
我最近一直在使用Python,我想这正是我重新思考如何使用C语言解决问题的原因。

关于:

string[] parts = s.Split(',').Select(x => x.Trim()).ToArray();
那么:

string[] parts = s.Split(',').Select(x => x.Trim()).ToArray();
如果您真的想避免LINQ,您可以在多个字符上拆分,并丢弃在、和空格之间获得的额外空条目。请注意,您可能会得到奇怪的结果,例如,如果您有连续的分隔符,您将无法再在它们之间获得空字符串:

s.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
这将适用于您的示例输入,但它非常脆弱。例如,@Oscar指出,令牌中的空格也会导致它们被拆分。我强烈建议您选择一个基于LINQ的选项。

如果您真的想避免使用LINQ,您可以在多个字符上拆分,并丢弃在、和空格之间的多余空条目。请注意,您可能会得到奇怪的结果,例如,如果您有连续的分隔符,您将无法再在它们之间获得空字符串:

s.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);


这将适用于您的示例输入,但它非常脆弱。例如,@Oscar指出,令牌中的空格也会导致它们被拆分。我强烈建议您选择基于LINQ的选项。

为什么要远离LINQ?它可能是最有用的语言特性之一,我认为它值得学习,或者至少值得一看。你有什么理由想远离LINQ吗?考虑到LINQ解决方案是多么简单,我怀疑您误解了LINQ的确切功能。e、 g.下面给出的答案都使用LINQ。如果输入字符串中逗号后的空格一致,则只需编写字符串[]parts=s.Splitnew[]{,},StringSplitOptions.None;我想远离LINQ的原因是,我不喜欢不一定知道编译器在做什么,但这可能是因为我不太了解LINQ在幕后的工作。例如,下面发布了一个答案:string[]parts=s.Split','。Selectx=>x.Trim.ToArray;这似乎在split函数中创建了一个新的字符串数组,但我不知道编译器如何实现Selectx=>x.Trim部分。它能复制吗?它是否在Split返回值的每个项上运行函数?那么,当您调用ToArray时,这会生成副本吗?我想我可以用两种方式编写函数并查看它编译成什么,但我想知道Select函数的封面下会发生什么。为什么不使用LINQ?它可能是最有用的语言特性之一,我认为它值得学习,或者至少值得一看。你有什么理由想远离LINQ吗?考虑到LINQ解决方案是多么简单,我怀疑您误解了LINQ的确切功能。e、 g.下面给出的答案都使用LINQ。如果输入字符串中逗号后的空格一致,则只需编写字符串[]parts=s.Splitnew[]{,},StringSplitOptions.None;我想远离LINQ的原因是,我不喜欢不一定知道编译器在做什么,但这可能是因为我不太了解LINQ在幕后的工作。例如,下面发布了一个答案:string[]parts=s.Split','。Selectx=>x.Trim.ToArray;这似乎在split函数中创建了一个新的字符串数组,但我不知道编译器如何实现Selectx=>x.Trim部分。它能复制吗?它是否在Split返回值的每个项上运行函数?那么,当你调用ToArray时,这会产生一个副本吗?我想我可以用两种方式编写函数,看看它编译成什么,但我想知道在Select函数的封面下会发生什么。我知道OP是这样编写的,但是.Split不起作用。它需要一个字符而不是一个字符串。我想知道为什么即使Servy已经立即更新了他的答案,这个评论也会得到支持@OscarMederos:你可以删除它:@TimSchmelter嗯,其中一张选票是在我修复它之后从我那里得到的。其中一个upvote在编辑之前,在修复之后只剩下一个upvote。我知道OP是这样写的,但是。Split,不起作用。它需要一个字符而不是一个字符串。我想知道为什么即使Servy已经立即更新了他的答案,这个评论也会得到支持@OscarMederos:你可以删除它:@TimSchmelter嗯,其中一张选票是在我修复它之后从我那里得到的。其中一个upvote在编辑之前,在修复之后只剩下一个upvote。这是我通常做的,但不适用于此场景。正如您所说,它在B、C、D、E等上失败。这是我通常做的,但不是在这种情况下。正如你所说,它在B、C、D、E等上失败。