我有以下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") { ... }
}
谢谢!
[编辑]最终数组应该是这样的:
array [,] = {{“Value1”,“Value2”,“Value3”},{“Value4”,“Value5”,“Value6”}}
答案 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
答案 1 :(得分: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();
答案 2 :(得分: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();
我不确定如何使用Multi-Dimensional Array
创建Linq
。