使用 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 中创建树层次结构的主要内容,如果未能解决你的问题,请参考以下文章