4章: 繰り返し処理とリスト操作
M言語では、リストを操作するためのいくつかの関数が提供されています。この章では、List.Generate関数、List.Transform関数、List.Filter関数、およびList.Accumulate関数を使用して、リストの繰り返し処理を行う方法を説明します。
1. List.Generate関数
List.Generate関数は、指定された条件に従ってリストを生成します。関数のシグネチャは以下のようになります。
List.Generate(起動関数, 条件関数, 反復関数)
例1: 1から10までのリストを生成する
list = List.Generate(() => 1, each _ <= 10, each _ + 1)
この例では、起動関数で1を設定し、条件関数で10以下の条件を設定し、反復関数で1ずつ加算しています。結果として、1から10までのリストが生成されます。
2. List.Transform関数
List.Transform関数は、リストの各要素に対して指定された変換関数を適用し、新しいリストを生成します。関数のシグネチャは以下のようになります。
List.Transform(リスト, 変換関数)
例2: 与えられたリストの各要素を2倍する
list = {1, 2, 3, 4, 5}
doubledList = List.Transform(list, each _ * 2)
この例では、与えられたリストの各要素に対して2倍する変換関数を適用しています。結果として、新しいリストが生成されます。
3. List.Filter関数
List.Filter関数は、リストの各要素に対して指定されたフィルター関数を適用し、条件に一致する要素のみを含む新しいリストを生成します。関数のシグネチャは以下のようになります。
List.Filter(リスト, フィルター関数)
例3: 与えられたリストから偶数のみを抽出する
list = {1, 2, 3, 4, 5} evenList = List.Filter(list, each _ % 2 = 0)
この例では、与えられたリストの各要素に対して偶数であるかどうかを判定するフィルター関数を適用しています。結果として、偶数のみを含む新しいリストが生成されます。
4. List.Accumulate関数
List.Accumulate関数は、リストの各要素に対して累積的な操作を行い、最終的な結果を生成します。関数のシグネチャは以下のようになります。
List.Accumulate(リスト, 初期値, 累積関数)
例4: 与えられたリストの要素の合計を求める
list = {1, 2, 3, 4, 5}
sum = List.Accumulate(list, 0, (state, current) => state + current)
この例では、与えられたリストの各要素に対して累積的な加算操作を行い、最終的な合計値を求めています。初期値として0を設定し、累積関数では現在の状態(state)に現在の要素(current)を加算しています。
これで、繰り返し処理とリスト操作に関する基本的な解説が終了しました。
演習問題: 繰り返し処理とリスト操作
以下の問題を解いて、繰り返し処理とリスト操作の理解を深めましょう。
- 与えられたリストの各要素を2倍にした新しいリストを作成してください。リスト:{1, 2, 3, 4, 5}
- 与えられたリストから3以上の要素だけを含む新しいリストを作成してください。リスト:{1, 3, 5, 2, 4, 6}
- 1から10までの連続した整数を要素とするリストを作成してください。
- 与えられたリストの要素をすべて足し合わせた合計値を求めてください。リスト:{10, 20, 30, 40, 50}
解答例は以下のようになります。
- List.Transform({1, 2, 3, 4, 5}, (x) => x * 2)
- List.Filter({1, 3, 5, 2, 4, 6}, (x) => x >= 3)
- List.Generate(() => 1, (x) => x <= 10, (x) => x + 1)
- List.Accumulate({10, 20, 30, 40, 50}, 0, (state, current) => state + current)