代码之家  ›  专栏  ›  技术社区  ›  Kevin Le - Khnle

使用LINQ在JSON中创建树层次结构

  •  3
  • Kevin Le - Khnle  · 技术社区  · 15 年前

    我有一个随机排列的名单。是否可以编写一条LINQ语句来创建JSON中的树层次结构,以便根据下面示例所示的规则对它们进行分组:

    输入:

    "Banana", "Apple", "Cheery", "Lemon", "Orange", ...
    

    输出:

    {
        "A, B, C": "Apple, Banana, Cherry",
        "D, E, F" : "",
        ...
        "J, L, M": "Lemon",
        "N, O, P": "Orange",
        ...
    }
    
    2 回复  |  直到 15 年前
        1
  •  9
  •   dtb    15 年前
    var list = new[] { "Banana", "Apple", "Cheery", "Lemon", "Orange" };
    
    var js = new JObject(from y in Enumerable.Range(0, 9)
                         join x in list
                         on y equals (x[0] - 'A') / 3
                         into g
                         let k = string.Join(", ", from i in Enumerable.Range(0, 3)
                                                   select (char)(3 * y + i + 'A'))
                         let v = string.Join(", ", from s in g orderby s select s)
                         select new JProperty(k, new JValue(v)));
    

    {
      "A, B, C": "Apple, Banana, Cheery",
      "D, E, F": "",
      "G, H, I": "",
      "J, K, L": "Lemon",
      "M, N, O": "Orange",
      "P, Q, R": "",
      "S, T, U": "",
      "V, W, X": "",
      "Y, Z, [": ""
    }
    
        2
  •  1
  •   millerjs    15 年前

    基本查询结构如下:

    // sample data.....
    char[][] rules = new char[2][];
    rules[0] = new char[] { 'A', 'B', 'C' };
    rules[1] = new char[] { 'D', 'E', 'F' };
    string[] rawData = new string[] { "Apple", "Fig", "Daikon", "Bing Cherry" };
    
    // query....
    var results = from rule in rules
                  select new
                  {
                      Rule = rule,
                      Matches = (from word in rawData
                                  join initialchar in rule on word[0] equals initialchar
                                  select word)
                  };
    

    格式化为JSON应该很简单。