我有一个字符串
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;
}
}
答案 0 :(得分:8)
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
的情况下生活。)
答案 1 :(得分:4)
您可以使用FTP_BINARY
的长度作为变量来决定要追加哪一侧
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)
...
答案 2 :(得分:3)
结果字符串是以相反顺序连接到赔率位置的字符的均衡位置中的字符:
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);