您可以使用LINQ或LAMBDA表达式在一行中对字符串进行逆序处理

Stu*_*ife 14 c# linq string lambda

并不是说我想要实际使用它(出于很多原因),但出于严格的好奇心,我想知道是否有一种方法可以在一行代码中使用LINQ和/或LAMBDA表达式对字符串进行逆序,而不使用任何框架"反向"方法.

例如

string value = "reverse me";
string reversedValue = (....);
Run Code Online (Sandbox Code Playgroud)

和reversedValue将导致"em esrever"

编辑 显然,一个不切实际的问题/解决方案我知道这一点,所以不要担心它严格地是围绕LINQ/LAMBDA结构的好奇心问题.

Jon*_*eet 29

好吧,即使不使用LINQ或lambda,我也可以在很长的一行中完成:

string original = "reverse me"; char[] chars = original.ToCharArray(); char[] reversed = new char[chars.Length]; for (int i=0; i < chars.Length; i++) reversed[chars.Length-i-1] = chars[i]; string reversedValue = new string(reversed);
Run Code Online (Sandbox Code Playgroud)

(亲爱的潜在编辑:不要将它打开到多行.整点是它是单行,按照它上面的句子和问题.)

但是,如果我看到有人为了它而避免使用框架方法,我会质疑他们的理智.

请注意,这根本不使用LINQ.LINQ的答案是:

string reverseValue = new string(original.Reverse().ToArray());
Run Code Online (Sandbox Code Playgroud)

避免使用Reverse,而是使用OrderByDescending:

string reverseValue = new string(original.Select((c, index) => new { c, index })
                                         .OrderByDescending(x => x.index)
                                         .Select(x => x.c)
                                         .ToArray());
Run Code Online (Sandbox Code Playgroud)

布莱什.我喜欢Mehrdad的回答.当然,所有这些都比简单的方法效率低得多.

哦,他们也都错了.反转字符串比反转代码点的顺序更复杂.考虑组合字符,代理对等......


Meh*_*ari 23

我没有看到这方面的实际用途,只是为了好玩:

new string(Enumerable.Range(1, input.Length).Select(i => input[input.Length - i]).ToArray())
Run Code Online (Sandbox Code Playgroud)


小智 20

new string(value.Reverse().ToArray())
Run Code Online (Sandbox Code Playgroud)

  • 或`string.Concat(value.Reverse())` (2认同)

Joe*_*ung 7

var reversedValue = value.ToCharArray()
                         .Select(ch => ch.ToString())
                         .Aggregate<string>((xs, x) => x + xs);
Run Code Online (Sandbox Code Playgroud)

  • 你不需要ToCharArray和Select (3认同)

Dej*_*nič 5

具有递归lambda的变体:

  var value = "reverse me";
  Func<String, String> f = null; f = s => s.Length == 1 ? s : f(s.Substring(1)) + s[0]; 
  var reverseValue = f(value);
Run Code Online (Sandbox Code Playgroud)

LP,Dejan


Ben*_*ngs 5

您可以使用Aggregate前置每个Char反转字符串:

 "reverse me".Aggregate("", (acc, c) => c + acc);
Run Code Online (Sandbox Code Playgroud)