Многомерные массивы в Линке - PullRequest
1 голос
/ 10 ноября 2009

У меня есть XML-файл, подобный следующему:

<novel>
  <paragraphs>
     <paragraph>
         <choice>This is paragraph 1</choice>
         <choice>Paragraph 1 alternative text</choice>
     </paragraph>
     <paragraph>
         <choice>This is paragraph 2</choice>
         <choice>Paragraph 2 alternative text</choice>
     </paragraph>
  </paragraphs>
</novel>

И я читаю это в свою программу, используя LINQ. Я все еще учу LINQ. Я хотел бы иметь двумерное отображение массива абзацев и вариантов выбора, т.е. Paragraph [0] [0] = "Это параграф 1" и Paragraph [1] [1] = "Альтернативный текст параграфа 2".

Проблема в том, что я не уверен, как вложить эти массивы в LINQ. В ту минуту у меня есть:

var paragraphsQuery =
   from paragraphsNode in xDoc.Elements("novel").Elements("paragraphs")
   from choiceNodes in paragraphsNode.Elements("paragraph").Elements("choice")
   select choiceNodes.Value;

... но это дает мне одну совокупность всех вариантов выбора (я потерял разделение абзацев). Кажется, как-то мне нужно сделать больше из утверждений внутри выбора?

Может ли кто-нибудь предложить мне какой-нибудь совет? Спасибо.

1 Ответ

2 голосов
/ 10 ноября 2009

Вам нужно что-то вроде:

var paragraphsQuery = xDoc.Elements("novel")
                          .Elements("paragraphs")
                          .Elements("paragraph")
                          .Select(p => p.Elements("choice")
                                        .Select(c => c.Value)
                                        .ToList())
                          .ToList();

Другими словами, на верхнем уровне вы хотите один элемент для каждого элемента «абзаца». Затем для каждого элемента вы хотите найти значения элементов «choice» и превратить их в список.

(Это будет использовать списки, а не массивы - вы можете использовать массивы, если вы действительно хотите, но списки обычно проще работать.)

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