Swift教室 Swift と競技プログラミングの教室

標準ライブラリの関数

読了目安 約2分

min、max、abs と配列のメソッド。自分で書く前に標準ライブラリを探す。

この章の目次

2 つの値の大きい方を選ぶ処理は、if 文でも書けます。 しかし Swift には、よく使う処理が標準ライブラリという部品集として最初から用意されています。 書く前に「もう用意されていないか」と探す癖を付けると、コードは短くなりバグも減ります。

min と max と abs

min は渡した値の最小値を、max は最大値を返します。 引数は 2 個でも、3 個以上並べても構いません。 abs は絶対値を返します。

Swift
print(min(3, 5))
print(max(2, 8, 5))
print(abs(-7))

配列のメソッド

値の後ろに . を付けて呼ぶ関数をメソッドと呼びます。 countappend もメソッドです。 配列には競プロで役立つメソッドがそろっています。

Swift
let a = [3, 1, 4, 1, 5]
print(a.min()!)
print(a.max()!)
print(a.sorted())
print(Array(a.reversed()))
print(a.reduce(0, +))
print(a.contains(4))
メソッド働き
.min()! / .max()!最小値と最大値
.sorted()小さい順に並べた新しい配列を返す
.reversed()逆順の並びを返す。配列に戻すには Array(...) で包む
.reduce(0, +)0 から始めて全要素を足す。合計の定石
.contains(x)x が入っているかを true / false で返す

.min().max()! を付けるのは、空の配列には最小値がないからです。 要素が必ずあると分かっている場面でだけ ! を付けます。

試してみよう: a.reduce(0, +)0100 に変えると、結果がどう変わるか確かめてください。

sorted() は元の配列を変えず、並べ替えた新しい配列を返します。

swap

2 つの変数の中身を入れ替えるには swap を使います。 引数の前の & は、変数そのものを渡して書き換えてもらう印です。 仕組みは Part 2 で扱うので、いまは決まり文句として使ってください。

Swift
var x = 1
var y = 2
swap(&x, &y)
print(x)
print(y)

学びどころ

概念一言まとめ
標準ライブラリよく使う処理の部品集。自分で書く前に探す
min / max / abs最小値、最大値、絶対値
メソッド値に . を付けて呼ぶ関数
.reduce(0, +)配列の合計を求める定石
swap(&x, &y)2 つの変数の入れ替え

演習

三人兄弟の身長 A、B、C が 1 行に空白区切りで入力されます。 いちばん高い身長といちばん低い身長の差を出力してください。 身長は 1 以上 200 以下の整数です。

テキスト
入力例:
160 154 152

出力例:
8
模範解答
Swift
let h = readLine()!.split(separator: " ").map { Int($0)! }
print(h.max()! - h.min()!)

配列にせず 3 つの変数に読んで、max(a, b, c) - min(a, b, c) と書いても解けます。