有没有办法在c#中使用linq使用char合并两个字符串char?

时间:2015-06-30 15:41:49

标签: c# linq

说我有两个字符串 string str1 =“SAKVRLW” string str2 =“TCOEFO”

我想要的结果是

result =“STACKOVERFLOW”。

很抱歉,如果这是一个基本问题,但我是Linq的新手?有任何帮助/建议来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

只为了它的乐趣:

string str1 = "SAKVRLW";
string str2 = "TCOEFO";

str1.ToCharArray()
    .Select((ch, ix)=> new { ch=ch, ix = ix*2 })
    .Concat(  str2.ToCharArray().Select((ch, ix)=> new { ch=ch, ix = ix*2 +1 }))
    .OrderBy(x=>x.ix) 
    .Select(x=>x.ch)
    .Aggregate("", (s,c)=>s+c).Dump();

答案 1 :(得分:0)

这个linq查询的核心是从select语句中获取索引号,以用作另一个数组的索引器。

然后检查一个越界条件,同时将char数组处理成要连接的字符串。

var str1 = "SAKVRLW";
var str2 = "TCOEFO";

var array2 = str2.ToCharArray();

string.Join(string.Empty, 
            str1.ToCharArray()
                .Select ((ch, index) => string.Format("{0}{1}", 
                                                       ch, 
                                                       index < array2.Length 
                                                       ? array2[index].ToString() 
                                                       : string.Empty  
                                                     )
                        )
           )

输出:STACKOVERFLOW

将上述Select(投影)与Aggregate代替string.Join一起使用可以这样做

str1.ToCharArray()
    .Select ((ch, index) => string.Format("{0}{1}", ch, index < array2.Length ? array2[index].ToString() : string.Empty  ))
    .Aggregate ((seed, sentance) => seed + sentance )

输出:STACKOVERFLOW