inohilog

/var/log/inohiro.log

LINQきもいきもい。

日本の原子力発電所の最大出力(キロワット)を、電力会社別にGroupして平均とって(Average)降順(OrderBy)で出力。
気持ち悪いのに、だんだん気持ちよくなってくる。ふしぎ。

元のXML

<?xml version="1.0" encoding="utf-8"?>
<Plants>
  <Plant>
    <Name>川内原子力</Name>
    <Belong>九州電力</Belong>
    <Address>鹿児島県川内市</Address>
    <PlantNum>2</PlantNum>
    <Power>89000</Power>
  </Plant>
  <!-- 省略 -->

クエリ式

var query = from plant in doc.Root.Elements()
			group int.Parse( plant.Element( "Power" ).Value )
			by plant.Element( "Belong" ).Value
				into power
				orderby power.Average() descending
				select new
					{
						Belong = power.Key,
						Power = power
					};

標準クエリ演算子メソッド形式)

var query = doc.Root.Elements()
	.GroupBy(
			plant => plant.Element( "Belong" ).Value,
			plant => int.Parse( plant.Element( "Power" ).Value )
		)
	.Select( group => new {
				Belong = group.Key,
				Power = group
			}
		)
	.OrderByDescending( group => group.Power.Average() );

出力

foreach ( var el in query )
{
	Console.WriteLine( el.Belong.ToString() );
	Console.WriteLine( el.Power.Average() );
}

結果

東京電力
101811.764705882
中部電力
90425
関西電力
88800
九州電力
87633.3333333333
東北電力
74975
日本原子力発電㈱
69575
四国電力
67400
中国電力
64000
北海道電力
57900
北陸電力
54000

しかしながら「東京電力 柏崎刈羽原子力発電所」は新潟中越沖地震の影響で現在運転停止状態。