Menu
CoddyTech

Chỉnh sửa danh sách

Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 73 trên 78.

Giờ bạn đã biết cách tạo danh sách và truy cập các phần tử trong danh sách, hãy cùng tìm hiểu cách chỉnh sửa chúng. Bạn có thể thay đổi các phần tử hiện có, thêm phần tử mới hoặc xóa hẳn các phần tử.

Để thay đổi một phần tử hiện có, hãy dùng dấu ngoặc vuông kép cùng phép gán:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)

Đầu ra:

[[1]]
[1] 10

[[2]]
[1] "world"

[[3]]
[1] TRUE

Để thêm một phần tử mới, chỉ cần gán giá trị cho một chỉ số chưa tồn tại:

my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)

Đầu ra:

[[1]]
[1] 10

[[2]]
[1] "hello"

[[3]]
[1] FALSE

Để xóa một phần tử, gán NULL cho phần tử đó:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)

Đầu ra:

[[1]]
[1] 10

[[2]]
[1] TRUE

Lưu ý rằng sau khi xóa phần tử thứ hai, các phần tử còn lại dịch chuyển để lấp chỗ trống. Phần tử ở vị trí 3 giờ nằm ở vị trí 2.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận ba dòng đầu vào:

  1. Ba giá trị phân tách bằng dấu phẩy để khởi tạo một danh sách (list), ví dụ: 50,hello,TRUE
  2. Một chỉ số và một giá trị mới, được phân tách bằng dấu phẩy, để sửa đổi, ví dụ: 2,goodbye
  3. Chỉ số của phần tử cần xóa, ví dụ: 3

Thực hiện các thao tác sau:

  1. Tạo một danh sách gồm ba giá trị ban đầu, chuyển chúng sang kiểu dữ liệu phù hợp: số, ký tự, logic
  2. In ra danh sách ban đầu
  3. Sửa đổi phần tử tại chỉ số đã chỉ định bằng giá trị mới, giữ nguyên giá trị đó dưới dạng chuỗi ký tự
  4. In ra danh sách sau khi sửa đổi
  5. Thêm phần tử thứ tư có giá trị 999 vào danh sách
  6. In ra danh sách sau khi thêm phần tử mới
  7. Xóa phần tử tại chỉ số đã chỉ định trong dòng đầu vào thứ ba
  8. In ra danh sách cuối cùng

Ví dụ, nếu đầu vào là:

100,world,FALSE
1,updated
2

Đầu ra sẽ là:

[[1]]
[1] 100

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[4]]
[1] 999

[[1]]
[1] "updated"

[[2]]
[1] FALSE

[[3]]
[1] 999

Giải thích:

  • Danh sách ban đầu: 100, "world", FALSE
  • Sau khi sửa đổi chỉ số 1: "updated", "world", FALSE
  • Sau khi thêm phần tử thứ tư: "updated", "world", FALSE, 999
  • Sau khi xóa chỉ số 2: "updated", FALSE, 999 (các phần tử còn lại dịch chuyển)

Nhớ dùng dấu ngoặc vuông kép [[ ]] để sửa đổi và gán NULL để xóa phần tử.

Tự làm thử

# Đọc đầu vào
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1))  # Ba giá trị phân tách bằng dấu phẩy
modify_input <- suppressWarnings(readLines(con, n = 1))    # Chỉ số và giá trị mới
remove_index <- suppressWarnings(readLines(con, n = 1))    # Chỉ số cần xóa
close(con)

# Phân tích các giá trị ban đầu
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])

# Phân tích đầu vào để sửa đổi
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]

# Phân tích chỉ số cần xóa
rem_index <- as.numeric(remove_index)

# TODO: Viết code bên dưới
# 1. Tạo danh sách gồm ba giá trị ban đầu (val1, val2, val3)
# 2. In ra danh sách ban đầu
# 3. Thay phần tử tại chỉ số mod_index bằng mod_value
# 4. In ra danh sách sau khi sửa đổi
# 5. Thêm phần tử thứ tư mới có giá trị 999
# 6. In danh sách sau khi thêm
# 7. Xóa phần tử tại chỉ số rem_index (dùng NULL)
# 8. In danh sách cuối cùng
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch R online