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

Posted

技术标签:

【中文标题】使用 LINQ 在 JSON 中创建树层次结构【英文标题】:Create tree hierarchy in JSON with LINQ 【发布时间】: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:如果它使事情变得更容易,那就是。 【参考方案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 应该很简单。

【讨论】:

以上是关于使用 LINQ 在 JSON 中创建树层次结构的主要内容,如果未能解决你的问题,请参考以下文章

在java中创建树数据结构?

PHP 在PHP中创建树结构

如何在 Team Foundation Server 2018 中创建层次结构?

使用 LINQ 的对象层次结构的深度优先扁平化集合

14.4二叉树层次建树

第04次作业-树