使用 Linq 创建数组数组

Posted

技术标签:

【中文标题】使用 Linq 创建数组数组【英文标题】:Create an array of arrays with Linq 【发布时间】:2011-05-25 09:37:27 【问题描述】:

我有以下 XML:

<datarow>
  <datacol><![CDATA[Value1]]></datacol>
  <datacol><![CDATA[Value2]]></datacol>
  <datacol><![CDATA[Value3]]></datacol>
</datarow>
<datarow>
  <datacol><![CDATA[Value5]]></datacol>
  <datacol><![CDATA[Value6]]></datacol>
  <datacol><![CDATA[Value7]]></datacol>
</datarow>
// ...

如何使用 linq 创建二维数组?

我会避免这样做:

foreach("datarow") 
    foreach ("datacol")  ... 

谢谢!

[EDIT] 最终数组应该是这样的:

array[,] = "Value1", "Value2", "Value3" , "Value4", "Value5", "Value6"

【问题讨论】:

是 linq,不是链接 ;-) 标题没问题,但是正文有错别字。 你是指交错数组还是多维数组? 那不是数组数组。 【参考方案1】:

这是一个从 XML 数据创建锯齿状数组的示例。

var xmlStr = "<table><dataRow><dataCol>1</dataCol><dataCol>2</dataCol></dataRow><dataRow><dataCol>5</dataCol><dataCol>6</dataCol></dataRow></table>";
var rows = from r in XElement.Parse(xmlStr).Elements("dataRow") select r;

int[][] intJagArray = (from r in rows select (from c in r.Elements("dataCol") select Int32.Parse(c.Value)).ToArray()).ToArray();

这是帮助我解决这个问题的页面。 http://www.daniweb.com/code/snippet267931.html

【讨论】:

【参考方案2】:

LINQ 和多维数组不能很好地混合。

可以使用传统的foreach循环,但要先计算多维数组的大小:

string[,] result = new string
[
    doc.Elements("datarow").Count(),
    doc.Elements("datarow").Max(d => d.Elements("datacol").Count())
];

int x = 0;
foreach (var datarow in doc.Elements("datarow"))

    int y = 0;
    foreach (var datacol in datarow.Elements("datacol"))
    
        result[x, y] = (string)datacol;
        y++;
    
    x++;

但是创建一个锯齿状数组确实要简单得多(即一维数组的一维数组;LINQ 和一维数组混合得很好!):

string[][] result = doc.Elements("datarow")
                       .Select(d => d.Elements("datacol")
                                     .Select(c => (string)c)
                                     .ToArray())
                       .ToArray();

【讨论】:

【参考方案3】:

这里是创建Jagged Array的代码:

        XDocument doc = XDocument.Load("...");

        string[][] data = (from row in doc.Elements("datarow")
                           select row.Elements("datacol").Select(col => col.Value).ToArray()).ToArray();

我不确定如何使用Linq 创建Multi-Dimensional Array

【讨论】:

string[][] 是一个锯齿状数组,而不是一个多维数组 (string[,])。 是的,我意识到了。已更正。

以上是关于使用 Linq 创建数组数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 拆分数组

如何使用 LINQ 将表列查询到数组中

如何在多维数组上使用 LINQ 来“展开”数组?

如何用 Linq 插入字节数组数据?

使用 LINQ (C#) 对 n 维数组进行数组操作

如何使用 LINQ 对数组进行分页?