Преобразовать IEnumerable<int[][]> в int[][]
Инициализация зубчатого массива в C# из файла XML. Следующий код, кажется, работает для создания нужной мне структуры данных из того, что я вижу в отладчике, но код возвращает значение типа IEnumerable.
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)
).ToArray()
).ToArray());
Если я добавлю дополнительный .ToArray()
в конце (благодаря другим статьям Stackru) я возвращаюсь int[1][][]
,
Любые идеи о том, как заставить код работать, так что я могу просто написать int[][] array = (from e in...
так далее.?
2 ответа
Если всегда есть только один doc
Элемент, вы можете сделать следующее:
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)
).ToArray()
).First().ToArray());
Если вы ожидаете больше, чем один doc
элемент, который вы можете сделать дополнительным SelectMany
вызов:
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)
).ToArray()
).SelectMany(x => x).ToArray());
У вас есть потомки * строки * столбцы. Это 3D, и вы хотите 2D. Я предполагаю, что вы ожидаете только одного потомка "doc" в вашем XML-файле. Вы можете проверить это с Single
которая завершается ошибкой, когда в коллекции более одного элемента, что означает более одного "документа":
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)).ToArray()).Single().ToArray());