【问题标题】:Create an array of arrays with Linq使用 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,不是链接 ;-) 标题没问题,但是正文有错别字。
  • 你是指交错数组还是多维数组?
  • 那不是数组数组。

标签: c# linq linq-to-xml


【解决方案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[,])。
      • 是的,我意识到了。已更正。
      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多