创建数组的动态数组

本文关键字:数组 动态 创建 | 更新日期: 2023-09-27 18:24:04

在C#中,我试图创建一个数组数组,也可以使用XML数据将其称为锯齿状数组。但我完全不知道如何启动

XML示例

<?xml version="1.0" encoding="utf-8"?>
<MAIN>
  <Items>
    <Name>name1</Name>
    <Data>data1</Data>
    <Category>category1</Category>
  </Items>
  <Items>
    <Name>name2</Name>
    <Data>data2</Data>
    <Category>category2</Category>
  </Items>
  <Items>
    <Name>name3</Name>
    <Data>data3</Data>
    <Category>category2</Category>//same category as above
  </Items>
  ...
  ...
  <Items>
    <Name>name20</Name>
    <Data>data20</Data>
    <Category>category16</Category>
  </Items>
</MAIN>

现在我需要创建一个具有category1、category2。。。直到类别节点上有什么类别,我需要为每个类别创建一个单独的数组来存储项目名称和数据,这样我就可以检索它们供我使用。

根据上面的示例xml,我需要在单个数组中使用相同的类别项目

项目和类别计数是完全动态的。如何动态地做到这一点?

创建数组的动态数组

您可以使用linq

var categorized = xe.Descendants("Items")
    .GroupBy(x => x.Element("Category").Value)
    .Select(x => new
    {
        Category = x.Key,
        Items = x.ToList()
    }).ToList();

您将在组中添加具有相同Category元素的Items。然后,您将在组中选择CategoryItems。它将为您返回List<{Category, List<Items>}>

这就是的分类结构

[
  {
    "Category": "category1",
    "Items": [
      {
        "Items": {
          "Name": "name1",
          "Data": "data1",
          "Category": "category1"
        }
      }
    ]
  },
  {
    "Category": "category2",
    "Items": [
      {
        "Items": {
          "Name": "name2",
          "Data": "data2",
          "Category": "category2"
        }
      },
      {
        "Items": {
          "Name": "name3",
          "Data": "data3",
          "Category": "category2",
          "#text": "//same category as above'n  "
        }
      }
    ]
  },
  {
    "Category": "category16",
    "Items": [
      {
        "Items": {
          "Name": "name20",
          "Data": "data20",
          "Category": "category16"
        }
      }
    ]
  }
]