C# 使用XElement进行遍历的效率/性能

C# 使用XElement进行遍历的效率/性能,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我正在研究一种使用xml解析数据的方法 给我的文件包含如下行: George | Washington | Carver 或者其他人可以寄给我这样的东西 Carver | Washington | George 等等 无论格式是什么,无论谁向我发送文件,都会向我发送有关如何解析文件的规则。在第一个示例中,它是名|中名|姓。在第二个例子中,它是姓|中名|名 我没有为每种可能性编写一个特例,而是创建了一个XML文件来描述元数据 <file> <first>0<

我正在研究一种使用xml解析数据的方法

给我的文件包含如下行:

George | Washington | Carver
或者其他人可以寄给我这样的东西

Carver | Washington | George
等等

无论格式是什么,无论谁向我发送文件,都会向我发送有关如何解析文件的规则。在第一个示例中,它是名|中名|姓。在第二个例子中,它是姓|中名|名

我没有为每种可能性编写一个特例,而是创建了一个XML文件来描述元数据

<file>
    <first>0</first>
    <middle>1</middle>
    <last>2</last>
</file>
然而,我对.NET的实现并不十分熟悉,这让我对一些东西产生了疑问

  • 只遍历
    XElement
    而不是创建字典会更好吗?我认为这不是一个好主意,因为我相信
    XElement
    遍历可能涉及无序的树遍历,以获得我需要的内容。对每个属性(我有3个以上)执行此操作将非常低效。我只是在这里猜测

  • 词典
    中检索是否为固定时间?我知道在Java
    HashMap
    中有常量get。如果c#也是这样,那么这似乎是一条更好的路线,因为我只需穿过一次,然后就能在恒定的时间内检索到我需要的任何东西

  • 为什么不测量一下呢?我会先做任何使代码最简单的事情,然后进行度量。我希望字典对于代码的其余部分更简单,所以我同意。但是,如果每个元素都是一个整数,我会使用
    字典

  • 是的,
    Dictionary
    是一个哈希表,所以假设没有可怕的冲突,它有O(1)个查找

  • 我会用LINQ的
    来描述
    ,不过:

    public static IDictionary<string, int> GetLookupTable(string xmlContents)
    {
        return XElement.Parse(xmlContents)
                       .Elements()
                       .ToDictionary(x => x.Name.LocalName,
                                     x => (int) x);
    }
    
    publicstaticidictionary GetLookupTable(字符串xmlContents)
    {
    返回XElement.Parse(xmlContents)
    .要素()
    .ToDictionary(x=>x.Name.LocalName,
    x=>(int)x);
    }
    
    (显然,这是将每个元素转换为
    int
    而不是
    字符串,但如果您确实需要
    IDictionary
    ,则可以轻松地更改它)

    public static IDictionary<string, int> GetLookupTable(string xmlContents)
    {
        return XElement.Parse(xmlContents)
                       .Elements()
                       .ToDictionary(x => x.Name.LocalName,
                                     x => (int) x);
    }