使用 Linq 创建数组数组
Posted
技术标签:
【中文标题】使用 Linq 创建数组数组【英文标题】:Create an array of arrays with 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,不是链接 ;-) 标题没问题,但是正文有错别字。 你是指交错数组还是多维数组? 那不是数组数组。 【参考方案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[,]
)。
是的,我意识到了。已更正。以上是关于使用 Linq 创建数组数组的主要内容,如果未能解决你的问题,请参考以下文章