TypeScript配列ソート解説
TypeScriptで配列をソートする
TypeScriptでは、配列をソートするためのさまざまな方法を提供しています。最も一般的な方法は、sort()
メソッドを使用することです。
sort()
メソッドの使用
sort()
メソッドは、配列内の要素を比較し、昇順または降順にソートします。デフォルトでは、要素は文字列として比較されます。
const numbers = [3, 1, 4, 1, 5];
numbers.sort(); // [1, 1, 3, 4, 5]
カスタム比較関数
sort()
メソッドに比較関数を渡すことで、要素を任意の基準でソートすることができます。比較関数は、2つの要素を受け取り、それらの比較結果(負の値、0、正の値)を返します。
const fruits = ["apple", "banana", "orange"];
fruits.sort((a, b) => a.localeCompare(b)); // ["apple", "banana", "orange"]
const numbers = [3, 1, 4, 1, 5];
numbers.sort((a, b) => a - b); // [1, 1, 3, 4, 5]
降順ソート
降順にソートするには、比較関数の結果を反転させます。
const numbers = [3, 1, 4, 1, 5];
numbers.sort((a, b) => b - a); // [5, 4, 3, 1, 1]
配列のコピーをソートする
元の配列を変更せずにソートするには、slice()
メソッドを使用して配列のコピーを作成してから、そのコピーをソートします。
const numbers = [3, 1, 4, 1, 5];
const sortedNumbers = numbers.slice().sort();
- カスタムソート関数
特定のソートロジックを実装する場合は、独自のソート関数を定義することもできます。 - サードパーティライブラリ
より複雑なソートアルゴリズムやパフォーマンスの最適化が必要な場合は、サードパーティライブラリを使用することもできます。
const numbers = [3, 1, 4, 1, 5];
numbers.sort(); // [1, 1, 3, 4, 5]
numbers
という配列を定義します。
const numbers = [3, 1, 4, 1, 5];
numbers.sort((a, b) => b - a); // [5, 4, 3, 1, 1]
b - a
は、b
がa
よりも大きい場合に正の値を返し、a
がb
よりも大きい場合に負の値を返します。- 比較関数は、2つの要素を受け取り、それらの比較結果(負の値、0、正の値)を返します。
sort()
メソッドに比較関数を渡して、降順にソートします。
const fruits = ["apple", "banana", "orange"];
fruits.sort((a, b) => a.localeCompare(b)); // ["apple", "banana", "orange"]
localeCompare()
メソッドを使用して、文字列をロケールに基づいて比較します。
const numbers = [3, 1, 4, 1, 5];
const sortedNumbers = numbers.slice().sort();
- コピーされた配列をソートします。
slice()
メソッドを使用して、元の配列のコピーを作成します。
サードパーティライブラリ
import { orderBy } from 'lodash';
const numbers = [3, 1, 4, 1, 5];
const sortedNumbers = orderBy(numbers, 'value');
orderBy()
メソッドは、複数の基準でソートすることができます。- Lodashライブラリを使用して、配列をソートします。
カスタムソート関数
- 三項演算子
const numbers = [3, 1, 4, 1, 5]; numbers.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
- 直接比較
const numbers = [3, 1, 4, 1, 5]; numbers.sort((a, b) => { if (a < b) { return -1; } else if (a > b) { return 1; } else { return 0; } });
- Ramda
import { sort } from 'ramda'; const numbers = [3, 1, 4, 1, 5]; const sortedNumbers = sort((a, b) => a - b, numbers);
- Lodash
import { orderBy } from 'lodash'; const numbers = [3, 1, 4, 1, 5]; const sortedNumbers = orderBy(numbers, 'value');
- バブルソート
const numbers = [3, 1, 4, 1, 5]; for (let i = 0; i < numbers.length; i++) { for (let j = 0; j < numbers.length - i - 1; j++) { if (numbers[j] > numbers[j + 1]) { const temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } }
typescript