[英]String manipulation in alternating order
我有一个字符串
string value = "123456789";
现在我需要按以下方式重新排列字符串:
123456789
1 right
12 left
312 right
3124 left
53124 right
...
975312468 result
是否有一个花哨的linq one liner解决方案来解决这个问题?
我现在的(工作但不太好看)解决方案:
string items = "abcdefgij";
string result = string.Empty;
for (int i = 0; i < items.Length; i++)
{
if (i % 2 != 0)
{
result = result + items[i];
}
else
{
result = items[i] + result;
}
}
string value = "123456789";
bool b = true;
string result = value.Aggregate(string.Empty, (s, c) =>
{
b = !b;
return b ? (s + c) : (c + s);
});
我实际上不喜欢LINQ语句中的局部变量,但在这种情况下, b
有助于交替方向。 (@klappvisor展示了如何在没有b
情况下生活)。
您可以使用res
长度作为变量来决定要追加哪一侧
items.Aggregate(string.Empty, (res, c) => res.Length % 2 == 0 ? c + res : res + c);
替代解决方案是使用范围进行压缩
items.Zip(Enumerable.Range(0, items.Length), (c, i) => new {C = c, I = i})
.Aggregate(string.Empty, (res, x) => x.I % 2 == 0 ? x.C + res : res + x.C)
编辑:真的不需要ToCharArray
......
结果字符串是以相反顺序连接到赔率位置的字符的均衡位置中的字符:
string value = "123456789";
var evens = value.Where((c, i) => i % 2 == 1);
var odds = value.Where((c, i) => i % 2 == 0).Reverse();
var chars = odds.Concat(evens).ToArray();
var result = new string(chars);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.