Создать массив массивов с Linq - PullRequest
1 голос
/ 14 декабря 2010

У меня есть следующий 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"}}

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

Вот пример создания зубчатого массива из данных 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 голос
/ 14 декабря 2010

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();
0 голосов
/ 14 декабря 2010

Вот код для создания 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...