从嵌套列表创建数组

Posted

技术标签:

【中文标题】从嵌套列表创建数组【英文标题】:Create array from nested lists 【发布时间】:2014-02-02 10:21:30 【问题描述】:

有点难以解释,但这里有...(使用 .net 4.5,C#)

我们目前有一个包含列对象列表的项目列表(如下面的“用户”)。即。

 public class TableColumn

    public string ColumnHeader  get; set; 
    public string ColumnValue  get; set; 
    public int ColumnWidth  get; set;   


public class User

    public string Username  get; set; 
    public string Address1  get; set; 
    public int Age  get; set; 

    public List<TableColumn> Columns  get; set; 

我们正在使用 JQGrid,我们需要传回 Json。

没有我们将使用的嵌套列表:-

var aaData = PatList.Select(d => new string[]  
              d.Username ,
              d.Address1 ,
              d.Age).ToArray();

 return Json(new
        
            sEcho = param.sEcho,
            aaData = aaData,
            iTotalRecords = Convert.ToInt32(totalRowsCount.Value),
            iTotalDisplayRecords = Convert.ToInt32(filteredRowsCount.Value)
        , JsonRequestBehavior.AllowGet);

效果很好。

我们正在苦苦挣扎的是如何在列列表中添加。

   var aaData = PatList.Select(d => new string[]  
              d.Username ,
              d.Address1 ,
              d.Age,
              d.Columns.forEach(????)).ToArray();

所以列与用户相关。

希望这是有道理的。任何帮助将不胜感激。

【问题讨论】:

如果您需要 JSON 格式的数据输出(即您的用户列表及其关联的对象图),您可能需要考虑使用 JSON 序列化程序。看看Does .NET 4 have a built-in JSON serializer/deserializer?。 【参考方案1】:

你可以这样做:

var aaData = PatList.Select(d => (new string[]  
        d.Username,
        d.Address1,
        d.Age.ToString()
    .Union(d.Columns.Select(c => c.ColumnHeader))).ToArray()
).ToArray();

这会为PatList 中的每个User 生成一个带有Username, Address1, Age &amp; all ColumnHeaders 的数组。

【讨论】:

谢谢 这有效,但是,它删除了许多空列,如果我在表中表示,id 仍然需要。通过使用 concat 而不是 union var aaData = PatList.Select(d => (new string[] d.Username, d.Address1, d.Age.ToString() .Concat(d.Columns. Select(c => c.ColumnHeader))).ToArray()).ToArray(); 是的,Union 删除重复/空标题。

以上是关于从嵌套列表创建数组的主要内容,如果未能解决你的问题,请参考以下文章

将对象的嵌套数组列表从适配器传递到活动

从嵌套列表的子数组返回元素的索引

使用嵌套的对象数组创建多级下拉列表

展平嵌套数组。 (爪哇)

使用 Python 从 JSON 嵌套列表和字符串数组中提取值

嵌套类对象列表的数组方法