【问题标题】:Create tree hierarchy in JSON with LINQ使用 LINQ 在 JSON 中创建树层次结构
【发布时间】:2011-03-10 09:09:05
【问题描述】:

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

输入:

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

输出:

{
    "A, B, C": "Apple, Banana, Cherry",
    "D, E, F" : "",
    ...
    "J, L, M": "Lemon",
    "N, O, P": "Orange",
    ...
}

【问题讨论】:

  • 第一个字符总是大写字母吗?
  • @dtb:如果它使事情变得更容易,那就是。

标签: c# linq json


【解决方案1】:
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”:“苹果、香蕉、爽口”, “D、E、F”:“”, “G,H,我”:“”, “J,K,L”:“柠檬”, “M,N,O”:“橙色”, “P,Q,R”:“”, "S, T, U": "", "V, W, X": "", "Y, Z, [": "" }

【讨论】:

    【解决方案2】:

    基本的查询结构是这样的:

    // 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 应该很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2011-11-16
      • 2015-12-05
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      相关资源
      最近更新 更多