分割 - 合并,聚合,压缩,LINQ

3

第一个GUID 字符串:

A-B-C-D

第二个GUID字符串:

W-X-Y-Z

第三个必需的可逆字符串:

A-W-B-X-C-Y-D-Z

什么是将第一和第二部分合并以获取第三部分,然后将其分开以获得两者的最佳方法?

Join-Split、Aggregate、Zip或其他方法?

Edit I:
如果每个GUID都被认为是 Enumerable<String> { A, B, C, D },那么可能需要使用LINQ。


我尝试过使用String.Concat方法..它只是将它们连接在一起而不是混合它们! - Ahmed Ghoneim
4个回答

4

最佳方法?我不确定。但我发现这是一种简单的方法。

string g1 = "A-B-C-D";
string g2 = "W-X-Y-Z";

var result = String.Join("-",g1.Split('-').Zip(g2.Split('-'), (a,b) => a+"-"+b));

编辑

并返回

int i=0;
var gs = result.Split('-').GroupBy(_ => i++ % 2).Select(g => String.Join("-",g))
               .ToList();

如何获取 g1g2 - Ahmed Ghoneim

4
string str1 = "A-B-C-D";
string str2 = "W-X-Y-Z";

合并操作:
string merged = string.Join("-",
    str1.Split('-').Zip(str2.Split('-'), (a, b) => a + "-" + b).ToArray());

结果:

A-W-B-X-C-Y-D-Z

分割:

ILookup<int, string> split = merged.Split('-')
    .Select((a, i) => new { i = i, val = a })
    .ToLookup(x => x.i % 2, x => x.val);
string split1 = string.Join("-", split[0].ToArray());
string split2 = string.Join("-", split[1].ToArray());

结果:

A-B-C-D
W-X-Y-Z

+1 遵循 Linq 的函数式风格,没有状态突变。 - Joachim Isaksson
也就是说,哈哈;这个账号是一个聊天机器人。看起来有人忘记注销他们的机器人账号了... ;p - Shotgun Ninja

1

我不知道“最好的方法”是什么,但你可以用一个简单的“for”循环来实现:

string a = "ABCD";
string b = "WXYZ";
string c = string.Empty;
if(a.Lenght == b.Lenght)//Check lenght
{
   for(int i = 0; i < a.Lenght; i++)
   {
      c += a[i] + "-" + b[i];
      if(i != a.Lenght)//If it isn't last character
      {
         c += "-";//Add a "-" end of "c"
      }
   }
}

1
这将包括双破折号。 - oleksii
你好,我不是在寻找简单的东西。不过,感谢你的关注 :) - Ahmed Ghoneim
1
@AhmedGhoneim 做得好! :) - Mehmet Fatih Marabaoğlu
1
尝试使用真实的GUID,例如2D548EEF-07BB-44E6-AC0F-BE2134D082BD - oleksii

1

如果语法不是100%,请原谅我,因为C#不是我的母语,但我会将每个GUID拆分成一个列表。然后进行简单的循环。

List<string> lstGuid1 = new List<string>;
List<string> lstGuid2 = new List<string>;
lstGuid1.AddRange(guid1.ToString().Split("-"));
lstGuid2.AddRange(guid2.ToString().Split("-"));
string guid3 = null;
if(lstGuid1.Length == lstGuid2.Length)
{
  for(int i = 0; i < lstGuid1.Length; i++)
  {
    guid3 += lstGuid1[i] + "-" + lstGuid2[i] + "-";
  }
  guid3 = guid3.Substring(0, guid3.Length - 1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接