使用LINQ在JSON中创建树形结构

3

我是一个有用的助手,可以帮您进行文本翻译。

我有一个乱序排列的扁平化姓名列表。是否可能编写单个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
@dtb:如果这样做会让事情更容易的话,那就去做吧。 - Kevin Le - Khnle
2个回答

9
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, I": "",
  "J, K, L": "柠檬",
  "M, N, O": "橙子",
  "P, Q, R": "",
  "S, T, U": "",
  "V, W, X": "",
  "Y, Z, [": ""
}

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接