2010-12-14 102 views
1

数组我有以下XML:创建阵列使用LINQ

<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") { ... } 
} 

谢谢!

[编辑]最后阵列应该是这样的:

阵列[,] = {{ “值1”, “值2”, “值3”},{ “值4”, “值5”, “Value6” }}

+0

这是LINQ,不链接;-)这是在标题罚款,但在体内错字! – 2010-12-14 16:35:23

+0

你的意思是一个锯齿阵列或多维数组? – SLaks 2010-12-14 16:35:23

+0

请参阅我的编辑 – 2010-12-14 16:42:54

回答

2

下面是一个从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

0

下面是代码来创建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

+0

'string [] []'是一个锯齿状的数组,不是多维的('string [,]')。 – dtb 2010-12-14 17:03:38

+0

是的,我意识到这一点。纠正。 – decyclone 2010-12-14 17:04:58

1

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();