一个数组问题

时间:2009-05-26 15:34:51

标签: c# arrays

我在

下面有一个数组
string stringArray = new stringArray[12];

stringArray[0] = "0,1";
stringArray[1] = "1,3";
stringArray[2] = "1,4";
stringArray[3] = "2,1";
stringArray[4] = "2,4";
stringArray[5] = "3,7";
stringArray[6] = "4,3";
stringArray[7] = "4,2";
stringArray[8] = "4,8";
stringArray[9] = "5,5";
stringArray[10] = "5,6";
stringArray[11] = "6,2";

我需要转换如下

List<List<string>> listStringArray = new List<List<string>>();

listStringArray[["1"],["3","4"],["1","4"],["7"],["3","2","8"],["5","6"],["2"]];

怎么可能?

3 个答案:

答案 0 :(得分:10)

我认为你真正想要的可能就是:

var indexGroups = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1]);

这会将元素作为分组枚举返回。

要返回列表清单,这是您真正要求的清单,请尝试:

var lists = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1])
             .Select(g => g.ToList()).ToList();

答案 1 :(得分:0)

没有这样的简写。你必须进入循环并拆分每个数组并添加到列表中。

答案 2 :(得分:0)

非LINQ版本(我必须承认它更加丑陋,但你可能别无选择)

        var index = new Dictionary<string, List<string>>();
        foreach (var str in stringArray) {
            string[] split = str.Split(',');
            List<string> items;
            if (!index.TryGetValue(split[0], out items)) {
                items = new List<string>();
                index[split[0]] = items;
            }
            items.Add(split[1]); 
        }

        var transformed = new List<List<string>>();
        foreach (List<string> list in index.Values) {
            transformed.Add(list); 
        }