【问题标题】:an array question数组问题
【发布时间】:2009-05-26 15:34:50
【问题描述】:

我下面有一个数组

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"]];

这怎么可能?

【问题讨论】:

  • 我没有遵循您希望此转换执行的操作...输入与输出有何关系?
  • 我很确定他希望输出按输入字符串中的第一个数字组合在一起(即“1, 3”和“1, 4”放入同一个桶中。 )
  • 啊,所以输入数据中有错字,应该以“1,1”开头

标签: c# arrays


【解决方案1】:

我想你真正想要的可能是这样的:

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();

【讨论】:

    【解决方案2】:

    没有这样的速记。您必须进入一个循环并拆分每个数组并添加到列表中。

    【讨论】:

    • 进入伟大而强大的LINQ! :P
    【解决方案3】:

    非 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); 
            }
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2011-05-04
      • 2021-10-03
      • 2011-10-17
      • 2011-07-01
      • 2011-02-19
      • 2011-02-16
      相关资源
      最近更新 更多