• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【C# LINQ】 MAX値と一緒に・・・)

C# LINQでXMLデータ内の最大要素数のresult要素を取得する方法

このQ&Aのポイント
  • C#の初心者です。XML形式のデータから、最大要素数を持つresult要素のみを取得したいと思っています。
  • 現在のコードでは、まずresult要素の中の要素数の最大値を取得し、その後にそれと同じ要素数を持つresult要素を検索しています。
  • 効率的な方法として、MAX値を取得すると同時にそれと同じ要素数を持つresult要素を取得する方法があるかどうかを教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

あ、ANo.1だと複数要素を返さないですね。 複数返すようにすると、こうかな: var rs = XmlResult.Elements( "result" ).Select( it => new { n = it.Elements().Count(), v = it } ).ToArray(); var resultElementsMaxValue = rs.Max( it => it.n ); var modelResult = rs.Where( it => it.n == resultElementsMaxValue ).Select( it => it.v ); 質問文のとあんまり変わらないので、あえて1回ですますものとして、こうとか: var resultset = XmlResult.Elements( "result" ); var num_result= resultset.Count(); var rs = new XElement[ num_result ]; int num_rs = 0, max_num_elem_result = -1; foreach ( var result in resultset ){ int num_elem_result = result.Elements().Count(); if ( num_elem_result < max_num_elem_result ){ continue; } if ( num_elem_result > max_num_elem_result ){ num_rs = 0; max_num_elem_result = num_elem_result; } rs[ num_rs++ ] = result; } Array.Resize( ref rs, num_rs ); foreach ( var result in rs ){ System.Console.WriteLine( result ); } 全然LINQじゃなくなってますが。

lt002039
質問者

お礼

osamuy様 ありがとうございます。 その方法で実現できそうです。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

ググってみた感じだと、こんなのとか: var r1 = ( from result in XmlResult.Elements( "result" ) select new { n = result.Elements().Count(), v = result } ).Aggregate( (reg, it) => it.n > reg.n ? it : reg ).v; System.Console.WriteLine( r1 ); でも、こっちのほうが効率的かもしれない: int max_nelem = -1; XElement r2 = null; foreach ( var it in XmlResult.Elements( "result" ) ){ int c = it.Elements().Count(); if ( c > max_nelem ){ max_nelem = c; r2 = it; } } System.Console.WriteLine( r2 );

関連するQ&A