繁体   English   中英

以交替顺序操作字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM