【C#.NET解説】のStack<T>クラスの活用方法と基本機能 虹の女神が教える効率的なデータ操作

2024年12月5日木曜日

コレクション

t f B! P L

名前空間 System.Collections.Generic

こんにちは、皆さん!私は虹を司る神です。今日は調和と秩序を重んじる心で、C#.NETの「Stack<T>」クラスについて解説します。このクラスの力を理解し、コードに魔法のような流れを作りましょう。

自己紹介

Stack<T>クラスは、最後に追加された要素が最初に取り出される「後入れ先出し」(LIFO: Last In, First Out)のデータ構造を提供します。たとえば、皿を積み重ねて、一番上から片付けるようなイメージです。これにより、特定の順序でデータを処理したいときに役立ちます。妹の先入れ先出しはQueue<T>となります。

基本機能です

Stack<T>は主に以下の基本操作を提供します

  • Push:新しい要素をスタックの上に追加する。
  • Pop:スタックの一番上の要素を取り出して削除する。
  • Peek:スタックの一番上の要素を削除せずに取得する。

.NET Core2.1からのクラスでFrameWorkにはないので気をつけてください。

C#

// Stackの基本機能を示すサンプルコード
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // スタックを作成
        Stack<int> stack = new Stack<int>();

        // 要素を追加
        stack.Push(1);
        stack.Push(2);
        stack.Push(3);

        // 一番上の要素を取得
        Console.WriteLine(stack.Peek()); // 出力: 3

        // 一番上の要素を取り出す
        Console.WriteLine(stack.Pop());  // 出力: 3

        // 現在の一番上を再度確認
        Console.WriteLine(stack.Peek()); // 出力: 2
    }
}

このサンプルコードでは、スタックに整数を追加し、PeekやPopを使用して要素を操作しています。Peekは削除せずに確認し、Popは削除しながら値を取得します。

Stackを使うと良い状況

Stack<T>が特に便利な状況は以下の通りです

  • 後入れ先出しの順序が必要な場合:例として、関数の呼び出し履歴を管理するコールスタック。
  • Undo機能の実装:ユーザーの操作履歴を保持して、最後の操作を簡単に取り消せるようにする。
  • 計算処理の一時的な記憶:たとえば、逆ポーランド記法(RPN)の計算機など。

TrimExcessメソッドの活用例

TrimExcessメソッドは、スタックの内部配列をトリムしてメモリの使用を最適化するために使用されます。要素数が大幅に減少した場合に効果的です。

C#

// TrimExcessメソッドの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<int> stack = new Stack<int>(100); // 大きな容量を持つスタックを作成
        for (int i = 0; i &lt; 50; i++)
        {
            stack.Push(i);
        }

        // 現在のスタック容量を確認(仮想的な方法)
        Console.WriteLine("容量を最適化する前: " + stack.Count); // 出力: 50

        // 必要以上のメモリを削減
        stack.TrimExcess();

        // 最適化後の状態を確認(見た目には同じ)
        Console.WriteLine("容量を最適化した後: " + stack.Count); // 出力: 50
    }
}

このコードでは、スタックに要素を追加し、TrimExcessメソッドで内部配列の余分な容量を削減しています。特にメモリ効率が重要なシナリオで便利です。

その他の便利なメソッド

スタックで利用できるその他のメソッドをいくつか紹介します。

  • ToArray
  • Contains
  • Clear
  • TrimExcess
  • Count
C#

// その他のメソッドの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<int> stack = new Stack<int>();
        stack.Push(1);
        stack.Push(2);
        stack.Push(3);

        // 配列に変換
        int[] array = stack.ToArray();
        Console.WriteLine(array[0]); // 出力: 3

        // 現在のスタックの要素数を表示
        Console.WriteLine(stack.Count); // 出力: 3

        // メモリを最適化
        stack.TrimExcess();
    }
}

この例では、Stackを配列に変換するToArrayや、要素を確認するContains、すべての要素を削除するClearなどを紹介しました。Stackの機能をうまく活用して効率的なコードを実現しましょう。

このブログを検索

QooQ