🪶
SwiftでforEachを使う
使い所
forEachは配列の各要素に対して指定した操作を実行するのに適しており、今回は新しい配列を生成する必要がないため、mapよりも適切な選択です。普段使わないので試してみる。
var arr: [Int] = [1, 2, 3, 4, 5]
arr.forEach({
if $0 == 5 {
print("要素数は同じ5です")
} else {
print("要素数は \($0)")
}
})
[log]
要素数は 1
要素数は 2
要素数は 3
要素数は 4
要素数は同じ5です
カレンダーを作るのにも使える。1~31の要素を生成して、ループして工夫するとカレンダーぽくなります。
let days = Array(1...31) // 1から31までの配列を生成
// 曜日のヘッダーを出力
print("Sun\tMon\tTue\tWed\tThu\tFri\tSat")
// 1日が水曜日から始まると仮定(例として)
// 最初の2つのタブを追加して、水曜日から開始する
print("\t\t", terminator: "")
// forEachを使用して各日付を出力
days.forEach { day in
print("\(day)\t", terminator: "") // 各日付の後にタブを追加
if (day + 2) % 7 == 0 { // 1日が水曜日から始まるため、オフセットとして2を加える
print() // 週の終わりに改行を追加
}
}
[log]
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
私が普段書いているDartでも同じことができるようだ。新しいListを生成しないなら使い道がありそうだな。Swiftの方が簡潔に書けている気がするな...
import 'dart:io';
void main() {
List<int> days = List.generate(31, (index) => index + 1); // 1から31までのリストを生成
// 曜日のヘッダーを出力
print("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
// 1日が水曜日から始まると仮定(例として)
// 最初の2つのタブを追加して、水曜日から開始する
stdout.write("\t\t"); // Dartではprintの代わりにstdout.writeを使用して改行を避ける
// forEachを使用して各日付を出力
days.forEach((day) {
stdout.write("$day\t"); // 各日付の後にタブを追加
if ((day + 2) % 7 == 0) { // 1日が水曜日から始まるため、オフセットとして2を加える
print(""); // 週の終わりに改行を追加
}
});
}
まとめ
新しい配列を生成する必要がなければ、map
を使わずに、forEach
を使うべき。カレンダーのUIを作るときに、試していましたね。
Discussion