Xóa liên hệ
Thuộc phần Logic và luồng chương trình trong hành trình Kotlin của Coddy. Bài học 23 trên 63.
Thử thách
KhóHoàn thành contactBook với các tham số commands: List<String>, names: List<String>, phones: List<String>. Tạo một sổ liên lạc trong bộ nhớ, bắt đầu trống ở mỗi lần gọi hàm. Ba danh sách có độ dài bằng nhau, tối đa 100. Ở mỗi chỉ số, commands chọn một thao tác; names và phones cung cấp các đối số cho thao tác đó. Tên là các từ ASCII viết thường, không rỗng; số điện thoại là các chuỗi chữ số không rỗng và phải giữ nguyên dạng chuỗi để bảo toàn các số 0 ở đầu. Mỗi lệnh tạo ra một câu trả lời trong danh sách trả về. Giữ lại mọi thứ bạn đã viết ở các bước trước, bao gồm tất cả lệnh và câu trả lời trước đó. Hỗ trợ PUT: lưu hoặc thay số điện thoại cho tên được cung cấp, sau đó trả lời saved. Thêm FIND: trả lời bằng số điện thoại đã lưu cho tên được cung cấp hoặc missing. Đối số số điện thoại của lệnh này bị bỏ qua. Thêm REMOVE: xóa tên được cung cấp và trả lời removed nếu tên đó tồn tại, nếu không thì trả lời missing. Đối số số điện thoại của lệnh này bị bỏ qua. Đầu vào chỉ chứa các lệnh được hỗ trợ trong bước này. Các chuỗi đối số bị bỏ qua có thể là bất kỳ văn bản không rỗng nào.
Trừ khi có giới hạn chặt hơn được nêu ở trên, mỗi tập hợp ở từng cấp có tối đa 100 phần tử, và các đối số số nguyên cùng giá trị số nguyên trong tập hợp nằm trong khoảng từ -1000 đến 1000. Văn bản được cung cấp để phân tích có thể chứa các biểu diễn không hợp lệ hoặc nằm ngoài phạm vi như mô tả.
Trả về giá trị có kiểu List<String>. Giữ nguyên code đầu vào/đầu ra đã cung cấp. Code đọc từng đối số đơn trên một dòng; danh sách bắt đầu bằng số lượng phần tử, sau đó là các phần tử, còn từ điển bắt đầu bằng số lượng mục, sau đó là từng khóa và giá trị. Danh sách lồng nhau lặp lại định dạng số lượng phần tử rồi đến các phần tử cho từng hàng. main đã cung cấp in giá trị trả về, theo sau là một ký tự xuống dòng. Danh sách dùng định dạng ngoặc vuông tiêu chuẩn của Kotlin; không in thêm nhãn.
Tự làm thử
fun contactBook(commands: List<String>, names: List<String>, phones: List<String>): List<String> {
val contacts = mutableMapOf<String, String>()
val replies = mutableListOf<String>()
for (i in commands.indices) {
val name = names[i]
when (commands[i]) {
"PUT" -> {
contacts[name] = phones[i]
replies.add("saved")
}
"FIND" -> replies.add(contacts[name] ?: "missing")
}
}
return replies
}
fun main() {
val commandsCount = readln().toInt()
val commands = mutableListOf<String>()
for (i0 in 0 until commandsCount) {
val commandsItem = readLine().orEmpty()
commands.add(commandsItem)
}
val namesCount = readln().toInt()
val names = mutableListOf<String>()
for (i0 in 0 until namesCount) {
val namesItem = readLine().orEmpty()
names.add(namesItem)
}
val phonesCount = readln().toInt()
val phones = mutableListOf<String>()
for (i0 in 0 until phonesCount) {
val phonesItem = readLine().orEmpty()
phones.add(phonesItem)
}
println(contactBook(commands, names, phones))
}Tất cả bài học trong Logic và luồng chương trình
4Các tập hợp lồng nhau
Danh sách các danh sáchDuyệt qua các hàngTóm tắt từng hàngLàm phẳng danh sách lồng nhauÔn tập: Các hàng ghế3Tập hợp và phép kiểm tra thành viên
Tạo tập hợpCập nhật tập hợpCác phép toán trên tập hợpKiểm tra tập conÔn tập: Khách mời sự kiện6Giá trị hàm
Viết biểu thức lambdaCác kiểu hàmTruyền hàmBiến được captureÔn tập: Điểm số có thể tùy chỉnh9Luồng điều khiển nâng cao
Mệnh đề bảo vệThoát khỏi vòng lặp có nhãnTiếp tục vòng lặp có nhãnHàm đệ quyÔn tập: hàng hợp lệ đầu tiênTự luyện tập: Playground Kotlin