array_utils チュートリアル
このチュートリアルでは、src のドキュメントコメントとテストから取った小さな例で配列ヘルパーを順に紹介します。自分のモジュールで使うには、moon add Luna-Flow/luna-utils で依存関係を追加し、パッケージ Luna-Flow/luna-utils をインポートします。すると @luna-utils.arr_sum などの名前で関数を使えます。以下の例はパッケージ内で実行するため、接頭辞を省略しています。
総和
arr_sum は加法モノイドを持つ任意の要素型で使え、zero_arr は期待される型のゼロを並べた配列を作ります。
inspect(arr_sum([1, 2, 3, 4]), content="10")
let empty : Array[Int] = []
inspect(arr_sum(empty), content="0")
inspect(arr_abs_sum([1, -2, 3, -4, 5]), content="15")
let zeros : Array[Double] = zero_arr(3)
assert_eq(zeros, [0.0, 0.0, 0.0])
最大値・最小値と検索
let xs = [5, 2, 8, 1, 9]
inspect(arr_max(xs), content="9")
inspect(arr_min(xs), content="1")
inspect(find([1, 2, 3, 2, 4], 2), content="Some(1)")
inspect(find([1, 2, 3, 2, 4], 5), content="None")
arr_max と arr_min は空配列で panic するので、配列が空になりうる場合は先に xs.is_empty() を確認してください。
反転
reverse は新しい配列を返し、reverse_inplace は引数そのものを書き換えます。
let original = [1, 2, 3, 4, 5]
inspect(reverse(original), content="[5, 4, 3, 2, 1]")
inspect(original, content="[1, 2, 3, 4, 5]")
reverse_inplace(original)
inspect(original, content="[5, 4, 3, 2, 1]")
一様性を判定する
same と same_to は要素そのものを比較し、map_same と map_same_to は関数による要素の像を比較します。
inspect(same([1, 1, 1, 1]), content="true")
inspect(same_to([1, 2, 1, 1], 1), content="false")
inspect(map_same([2, 4, 6, 8], x => x % 2), content="true")
inspect(map_same_to([1, 1, 1], 2, x => x * 2), content="true")
same と map_same は空配列で panic します。配列が空になりうる場合で、期待する値がわかっているときは、空配列に対して true を返す same_to か map_same_to を使ってください。
次のステップ
API リファレンスにはすべてのシグネチャがあり、設計ノートは制約と空配列の扱いを説明しています。境界的な挙動に依存する前に、src/array_utils_test.mbt のテストで確認してください。