Bandingkan Minggu
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 37 dari 56.
Fitur terakhir: gunakan data dari dua minggu dan laporkan perubahan untuk setiap kebiasaan.
Setiap minggu berupa list operasi habit:day yang ditulis pada baris tersendiri. Buat dua dictionary seperti yang sudah kamu lakukan, lalu bandingkan keduanya.
Kebiasaan yang menarik adalah gabungan kunci dari kedua minggu tersebut (suatu kebiasaan mungkin muncul pada satu minggu, tetapi tidak pada minggu lainnya). Iterasikan gabungan itu dalam urutan alfabetis.
let allKeys = Set(weekA.keys).union(weekB.keys).sorted()
for name in allKeys {
let a = weekA[name]?.count ?? 0
let b = weekB[name]?.count ?? 0
print("\(name): \(a) -> \(b)")
}?? 0 menangani kasus kunci yang hilang. weekA[name]?.count adalah cara membaca count dengan optional chaining tanpa melakukan unwrap terlebih dahulu. Ekspresi ini mengembalikan nil saat kuncinya tidak ada, lalu ?? 0 mengubahnya menjadi nol.
Tantangan
SedangBaca dua baris input, masing-masing berupa daftar habit:day yang dipisahkan koma (satu untuk setiap minggu). Untuk setiap kebiasaan yang muncul pada salah satu minggu, cetak satu baris dengan format berikut:
<habit>: <a> -> <b> <arrow>dengan a adalah jumlah hari unik pada minggu ke-1, b adalah jumlah hari unik pada minggu ke-2, dan arrow adalah:
UPjikab > aDOWNjikab < aSAMEjikab == a
Cetak kebiasaan dalam urutan alfabetis. Setelah baris untuk setiap kebiasaan, cetak satu baris ringkasan:
Improved: <n>dengan n adalah jumlah kebiasaan dengan panah UP.
Untuk input read:1,read:3,workout:2 pada baris 1 dan read:1,read:2,read:5,yoga:7 pada baris 2, outputnya adalah:
read: 2 -> 3 UP
workout: 1 -> 0 DOWN
yoga: 0 -> 1 UP
Improved: 2Coba sendiri
func parse(_ line: String) -> [String: [Int]] {
var habits: [String: [Int]] = [:]
if line.isEmpty { return habits }
for op in line.components(separatedBy: ",") {
let parts = op.components(separatedBy: ":")
let day = Int(parts[1])!
if !(habits[parts[0], default: []].contains(day)) {
habits[parts[0], default: []].append(day)
}
}
return habits
}
let weekA = parse(readLine()!)
let weekB = parse(readLine()!)
// TODO: gabungkan semua kunci; untuk setiap kebiasaan, gunakan format '<name>: a -> b ARROW'; lalu 'Improved: <n>'
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Jumlah dan indeksHuruf besar, huruf kecil, dan hapus spasiMencari dalam stringMemisahkan dan menggabungkanMengganti substringUlasan: Memeriksa nama pengguna4set
Membuat setGabungan dan IrisanSelisih dan Selisih SimetrisHimpunan Bagian dan Himpunan SupersetRingkasan: Filter Tag7Proyek: Pelacak Kebiasaan
Gambaran Umum ProyekTandai Selesai2Rentang dan Langkah
Rentang Tertutup vs Setengah TerbukaLangkahMetode RentangRentang dalam SwitchRangkuman: Kisi KalenderLatihan sendiri: Playground Swift