LoginSignup
1
1

[TypeScript] イミュータブルなin-placeアルゴリズムの理解

Last updated at Posted at 2024-05-13

イミュータブルなアプローチとは?

イミュータブルなアプローチは、データを変更せずに新しいデータを生成する手法です。JavaScriptやTypeScriptでは、イミュータブルなデータ構造を使用して、データの安全性や予測可能性を高めることができます。例えば、配列やオブジェクトを変更せずに新しい配列やオブジェクトを生成する方法があります。

in-placeアルゴリズムとは?

in-placeアルゴリズムは、追加のメモリ領域を使用せずにデータを変更するアルゴリズムです。配列の要素を置換したり、文字列を変更したりする際に、元のデータを上書きしていきます。このアプローチはメモリ効率が高く、特に大規模なデータ処理で有用です。

イミュータブルなin-placeアルゴリズムの実装

配列を反転するイミュータブルなin-placeアルゴリズムを実装の例です。
JavaScriptやTypeScriptでは、文字列がイミュータブルであるため、元の文字列は変更せずに新しい配列を作成して反転する必要があります。

function reverseStringInPlace(str: string): string {
    const strArray = str.split(''); // 文字列を配列に分割
    let start = 0;
    let end = strArray.length - 1;

    while (start < end) {
        const temp = strArray[start];
        strArray[start] = strArray[end]; // 配列の要素は直接変更できる
        strArray[end] = temp;
        
        start++;
        end--;
    }

    return strArray.join(''); // 配列を文字列に結合して返す
}

let myString = "Hello, World!";
console.log(reverseStringInPlace(myString)); // 出力: "!dlroW ,olleH"
console.log(myString); // 出力: "Hello, World!"

このコードでは、文字列を配列に変換してからin-placeな操作を行い、最後に配列を文字列に結合して元の文字列を変更せずに反転します。実行結果を見ると、元の文字列は変更されずにそのまま保持されていることがわかります。

JavaScriptやTypeScriptでは、文字列はイミュータブルなデータ型であり、一度作成された文字列はその内容を直接変更することはできません。しかし、配列はミュータブルなデータ型であり、配列の要素は直接変更することができます。

str は文字列型であり、要素を直接変更することはできませんが、strArray は配列型であり、要素を直接変更することができます。そのため、配列の要素に対してインデックスを指定して直接値を代入することができます。

まとめ

In-Placeアルゴリズムは、メモリ効率性とパフォーマンスを高めるために重要です。イミュータブルなアプローチとin-placeアルゴリズムを組み合わせることで、データの安全性や効率性を向上させることができます。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1