2010-12-14 7 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 사용하여 BI 차원 배열을 만들 수 있습니까?

나는 일을 피할 수 있습니다 :

foreach("datarow") { 
    foreach ("datacol") { ... } 
} 

감사합니다!

[EDIT] 최종 배열이 같아야 :

배열 [] = {{ "값 1", "값 2", "VALUE3"}, { "VALUE4", "VALUE5", "Value6" }}

+0

제목은 문제가 아니지만 본문에는 오타가 있습니다. –

+0

들쭉날쭉 한 배열 또는 다차원 배열을 의미합니까? – SLaks

+0

내 편집을 참조하십시오 –

답변

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

+0

그래, 나는 그것을 깨달았다. 수정 됨. – decyclone

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++; 
} 

을하지만 가변 배열을 만들기 위해 (즉, 한 차원 정말 훨씬 간단합니다 1 차원 배열의 배열 : LINQ와 1 차원 배열이 잘 섞여 있습니다.) :

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