【问题标题】:Load xml file into 2d rectangular array using linq使用 linq 将 xml 文件加载到二维矩形数组中
【发布时间】:2014-02-04 13:46:51
【问题描述】:

我目前正在使用锯齿状数组:private double[][] array;,我像这样加载数组。

加载锯齿状数组

XDocument doc = XDocument.Load("file.Xml");
array = doc.Root.Elements("Month").Select(month => month.Elements().Select(x => (double)x).ToArray()).ToArray();

所以现在我的问题是我需要获取内部数组的长度,因为我读到这是不可能的,所以我需要将 xml 加载到一个矩形数组 private double[,] array; 但使用 linq 我不知道如何.

XML 外观

<document>
  <Month>
    <Depth>-0.25</Depth>
    <October>0.95</October>
    <November>-0.90</November>
    ...
  </Month>
  <Month>
    <Depth>-0.5</Depth>
    <October>0.47</October>
    <November>-0.17</November>
    ...
  </Month>
  ...
</document>

【问题讨论】:

  • 为什么无法获取内部数组的长度?
  • Linq 是必需的吗?
  • 好吧,当我尝试 getLenght(1) 时,我得到了一个例外,我已经在这里阅读了 stackoverflow.com/questions/2457507/… 我认为这是最后一篇文章
  • @C.Evenhuis 需要很快,因为它是在一个事件中,我知道 linq 做得很好,但是不,这不是一个要求
  • 不需要存储在数组中

标签: c# xml arrays linq


【解决方案1】:
double[][] array = 
   doc.Root.Elements("Month")
      .Select(month => month.Elements().Select(x => (double)x).ToArray())
      .ToArray();

foreach(var innerArray in array)
    Console.WriteLine(innerArray.Length); // you can get length of inner array

【讨论】:

  • 我不能允许进行 foreach,因为它会在 mousemove 上调用,并且如果用户在画布中移动,它会不断被调用
  • @Mokmeuh 很抱歉没有找到你。你能解释一下 foreach 有什么问题吗?你到底想从array 得到什么?
  • 对不起,如果我不清楚,让我再试一次,我的意思是,每次鼠标移动时都会调用 foreach,所以它会占用大量资源,并且需要长度像这样的三元条件,array[yCurrent &gt;= array.GetLength(1) ? 11 : yCurrent][xCurrent &gt;= array.GetLength(0) ? 12 : xCurrent] 但我无法获得维度 1 的长度,因为它不存在,因为它不是矩形数组
  • @Mokmeuh 你不必枚举array。这只是访问内部数组长度的一个示例。您可以通过索引array[0].Length 访问来做同样的事情 - 这将为您提供第一个内部数组的长度
  • ....我很笨xD,让我试试这个,它的工作,好的,谢谢,我想我问错了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多