Unity_Lesson

LINQ(Language Integrated Query)は、C# などの .NET 言語で使用できる強力な機能で、データベース、コレクション、XML などのデータソースに対してクエリを記述するための構文を提供します。LINQを使用すると、データの取得や操作を簡潔かつ直感的に行うことができます。

LINQの主な特徴

  1. 一貫性: LINQは、異なるデータソース(配列、リスト、データベースなど)に対して一貫した構文を提供します。これにより、異なるデータソースでの操作が容易になります。

  2. 可読性: LINQは、SQLに似た構文を持っているため、データの操作が直感的で理解しやすいです。

  3. 遅延実行: LINQは遅延実行をサポートしており、必要なときにのみデータが評価されます。これにより、パフォーマンスが向上する場合があります。

  4. 強力なフィルタリング、ソート、グループ化機能: LINQを使用すると、データを簡単にフィルタリング、ソート、グループ化できます。

LINQの基本的な使い方

以下に、LINQの基本的な使用例を示します。この例では、整数のリストから偶数をフィルタリングし、結果を表示します。

using System;
using System.Collections.Generic;
using System.Linq;

public class LINQExample
{
    public static void Main()
    {
        // 整数のリストを作成
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // LINQを使って偶数をフィルタリング
        var evenNumbers = from num in numbers
                          where num % 2 == 0
                          select num;

        // 結果を表示
        Console.WriteLine("Even Numbers:");
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

メソッドシンタックス

上記のクエリ構文の代わりに、メソッドシンタックスを使うこともできます。以下は同じ結果を得るための例です。

using System;
using System.Collections.Generic;
using System.Linq;

public class LINQExample
{
    public static void Main()
    {
        // 整数のリストを作成
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // メソッドシンタックスを使って偶数をフィルタリング
        var evenNumbers = numbers.Where(num => num % 2 == 0);

        // 結果を表示
        Console.WriteLine("Even Numbers:");
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

UnityでのLINQの使用例

UnityでもLINQを使用することができます。以下は、Unityのゲームオブジェクトのリストから特定の条件に一致するオブジェクトをフィルタリングする例です。

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class LINQInUnity : MonoBehaviour
{
    public GameObject[] gameObjects; // Unityのゲームオブジェクトの配列

    void Start()
    {
        // アクティブなゲームオブジェクトのみをフィルタリング
        var activeGameObjects = gameObjects.Where(obj => obj.activeSelf);

        // 結果を表示
        foreach (var obj in activeGameObjects)
        {
            Debug.Log("Active GameObject: " + obj.name);
        }
    }
}

まとめ