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)
var reversedValue = value.ToCharArray()
.Select(ch => ch.ToString())
.Aggregate<string>((xs, x) => x + xs);
Run Code Online (Sandbox Code Playgroud)
具有递归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
您可以使用Aggregate前置每个Char反转字符串:
"reverse me".Aggregate("", (acc, c) => c + acc);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25270 次 |
| 最近记录: |