名前空間 System.Linq
自己紹介
おお、余が誰かも知らぬというのか?まあよい。余は冥界を統べる者だ。だが今日は死者のことではなく、「C#.NET」のLinqクラスについて教えよう。Linq(Language Integrated Query)は、データ操作を簡潔かつ直感的に行える魔法のような存在だ。耳を傾けよ、さすれば賢者の知識を得られるであろう。
基本機能
Linqはデータソース(配列、リスト、データベースなど)にクエリを記述するための方法を提供する。これにより、データを簡単に検索、並び替え、集計できる。まずは基本的なコードを見てみるがよい。
// Linqの基本的な使用例
using System;
using System.Linq;
class Program
{
static void Main()
{
// データソース
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// クエリ式
var evenNumbers = numbers.Where(n => n % 2 == 0);
// 結果を表示
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 2 4 6
}
}
}
速度についての注意点
Linqは非常に便利だが、パフォーマンス面で注意が必要な場合がある。特に、大量のデータを扱う際には、Whereメソッドのような繰り返し処理に注意せよ。場合によっては、手動でループを書く方が速いこともあるのだ。
// Linqと手動ループの速度をStopwatchで比較
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
class Program
{
static void Main()
{
// データソース
int[] numbers = Enumerable.Range(1, 1000000).ToArray();
// StopwatchでLinqの時間を計測
var stopwatch = Stopwatch.StartNew();
var linqResult = numbers.Where(n => n % 2 == 0).ToList();
stopwatch.Stop();
Console.WriteLine($"Linqの実行時間: {stopwatch.ElapsedMilliseconds} ms");
// Stopwatchで手動ループの時間を計測
stopwatch.Restart();
var manualResult = new List();
foreach (var num in numbers)
{
if (num % 2 == 0)
manualResult.Add(num);
}
stopwatch.Stop();
Console.WriteLine($"手動ループの実行時間: {stopwatch.ElapsedMilliseconds} ms");
}
}
クエリ構文とメソッド構文の違い
Linqにはクエリ構文とメソッド構文の2種類がある。それぞれの使い方を見てみよう。
// クエリ構文とメソッド構文の比較
using System;
using System.Linq;
class Program
{
static void Main()
{
string[] names = { "冥界", "天空", "大地", "海" };
// クエリ構文
var querySyntax = from name in names
where name.Contains("冥")
select name;
// メソッド構文
var methodSyntax = names.Where(name => name.Contains("冥"));
// 結果を表示
foreach (var name in querySyntax)
{
Console.WriteLine(name); // 冥界
}
}
}
具体的な使い方
世界の国々の人口データを用いて、人口が10億を超える国を人口密度の降順に並べる例を示す。
// 世界の人口データを使ったLinqの例
using System;
using System.Linq;
class Program
{
static void Main()
{
var countries = new[]
{
new { Name = "中国", Population = 1444216107, Density = 153 },
new { Name = "インド", Population = 1393409038, Density = 464 },
new { Name = "アメリカ", Population = 331893745, Density = 36 },
new { Name = "インドネシア", Population = 273523621, Density = 151 },
new { Name = "パキスタン", Population = 225199937, Density = 287 },
new { Name = "ブラジル", Population = 213993437, Density = 25 },
new { Name = "ナイジェリア", Population = 206139587, Density = 223 },
new { Name = "バングラデシュ", Population = 166303498, Density = 1265 },
new { Name = "ロシア", Population = 145912025, Density = 9 },
new { Name = "日本", Population = 126050804, Density = 347 }
};
//人口が10億を超えている国で、人口密度で降順
var result = countries
.Where(c => c.Population > 1000000000)
.OrderByDescending(c => c.Density)
.ToList();
foreach (var country in result)
{
Console.WriteLine($"{country.Name} (人口: {country.Population}, 密度: {country.Density})");
}
}
}
解説
このコードでは、Whereメソッドを使って人口が10億を超える国をフィルタリングし、OrderByDescendingメソッドで人口密度が高い順に並べています。このようにLinqを活用することで、複雑なデータ処理が簡単に記述できます。
Linqは、単なる便利なツールではなく、データを効率的に操作するための力強い味方だ。さあ、今日から君もLinqを駆使し、新たな地平を切り開くのだ!
0 件のコメント:
コメントを投稿