c# 集合的合并

命题是:有一个集合,形如List<string>() { "AAA", "BBB", "CCC", "DDD", "EEEE", "FFF" }。要求将集合分成三个子集合,每个子集合里面包含两个旧元素和两个空格,空格放在每个旧元素的后面。代码表示为{ "AAA","", "BBB",""}、{ "CCC","", "DDD",""}、{ "EEEE","", "FFF",""}

最后的实现代码为:

List<string> list = new List<string>() { "AAA", "BBB", "CCC", "DDD", "EEEE", "FFF" };
int cnt = 3;
List<string[]> res = new List<string[]>();
for (int k = 0; k < 2; k++)
    res.Add(list.Skip(k * cnt).Take(cnt).Select(x => new string[] { x, "" }).Aggregate(
        (x, y) => x.Concat(y).ToArray()));

其中res为最终需要返回的结果。

在这段代码中,我用了四个LinQ的扩展方法。Skip,Take,Select和Aggregate。第一个函数Skip的意思是跳过N个元素,返回剩下的。它得到{ "AAA", "BBB" ,"CCC", "DDD","EEEE", "FFF"}以及{"CCC", "DDD","EEEE", "FFF"}和{"EEEE", "FFF"}

第二个函数Take的意思为从头开始,返回N个连续的元素。它会得到{ "AAA", "BBB" },{"CCC", "DDD"},{"EEEE", "FFF"}

第三个函数Select的意思是“通过合并元素的索引将序列中的每个元素投影到新表中”。本实例中的作用是返回每个元素+空格的阵列。本步骤后会得到{string[]{"AAA",""}, string[]{"BBB",""}},{string[]{"CCC",""},string[]{"DDD",""},},{string[]{"EEEE",""},string[]{"FFF",""}}

最后一个函数Aggregate的作用是针对返回的阵列的集合进行内部运算合并成字符串的阵列。

此时将会返回{string[]{ "AAA","", "BBB",""}、string[]{"CCC","", "DDD",""}、string[]{ "EEEE","", "FFF",""}}

到此,我想要的结果即实现了。

欢迎交流和纠正。

posted @ 2012-09-21 11:18  脸谱匠  阅读(2425)  评论(0编辑  收藏  举报