2010-12-14 101 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();