0

私はしばらくの間、Linq to XML を使用してきましたが、上級ユーザーにはほど遠いものです。そして、時々自分のコードを見て、「これを行うにはもっと効率的な方法が必要だ」と思うので、StackOverflow の世界が以下を改善する方法を知っているかどうかを調べています。コード。List<string>達成されていることは、XML ファイルに保持されているシステム レコードから削除されるソフトウェアのリストを含むシンプルなメソッドが与えられることです。

var xe = (from el in mainForm.xeSystemData.Elements("System")
              where el.Element("Name").Value == systemName
              select el.Element("SoftwareList"));

    foreach (string sw in softwareToRemove)
    {
        foreach (var v in xe.Elements("Software"))
        {
            if (v.Value.ToString() == sw)
            {
                v.Remove();
            }
        }
    }

参照用の XML のスニペットを次に示します。

<SoftwareList>
  <Software>IBM Client Access</Software>
  <Software>Adobe Acrobat Reader 10.1</Software>
</SoftwareList>

私が考え続けているのは、Linq to XML を利用して、2 つの foreach ループを作成せずに選択的な要素を削除する、より迅速な方法があるということです。

4

2 に答える 2

2

私はおそらく次のようなことをするでしょう:

var toRemove = new HashSet<string>(sofwareToRemove);

foreach(var item in xe.Elements("Software")
                      .Where(e => toRemove.Contains(e.Value))
{
   item.Remove();
}

ただし、これは Linq to XML に固有のものではありません。リストの代わりに HashSet を使用するだけで、全体的な労力が O(n^2) から O(n) に削減されます。

于 2013-08-30T23:35:15.447 に答える