If Tmp(i) <> Empty Then
If Not dic.Exists(Trim(Tmp(i))) Then dic.Add Trim(Tmp(i)), ""
End If
Nếu muốn viết ngắn hơn thì viết như vầy:
If Tmp(i) <> Empty Then dic(Trim(Tmp(i)) = ""
Theo nguyên tắc của VBscript Dictionary, nếu key chưa có thì dic tự động add vào; nếu đã có thì dic sẽ đổi giá trị item của nó. (bạn không cần item nên khong sao cả)
Tuy nhiên, điều đáng lưu ý là code này tuy ngắn hơn nhưng chưa hẳn đã hiệu quả hơn. Vì nó ép đổi item cho nên công việc update luôn luôn thực hiện. Code nguyên thủy của bạn thì dic xét key trước khi thực hiện update.
Như vậy nên dùng cái nào? nếu bạn dự đoán rằng số key duplicate thấp thì dùng code gọn. Nếu số duplicate cao thì dùng code dài.
Đây là một ví dụ điển hình cho bạn thấy ngắn gọn không có nghĩa là hiệu quả. Và cách chọn lựa code cho hiệu quả lắm khi cũng tùy thuộc vào tình trạng dữ liệu mà nó được sử dụng.
(thực sự, nếu tôi viết code bài này thì tôi cứ cộng thẳng từng đoạn chuỗi và dùng hàm Instr để tìm duplicate. Nếu chuỗi ngắn thì cách này hiệu quả hơn vì không phải tạo dựng cái dic)
Chú thích thêm: nếu là tôi thì tôi tập bỏ thói quen dùng biến tên là tmp. Trong code của bạn cái key kia khong hẳn đã là temporary. Dùng tên như thế không đúng. Tên tmp thường dùng để chuyển đổi dữ liệu giữa 2 biến:
tmp = a
a = b
b = tmp
Vì khong rõ rệt nhiệm vụ cho nên người đọc cũng có cảm tưởng bạn dùng tmp để chỉ temperature (nhiệt độ)
(hình như tháng trước có 1 bạn cũng nhắc tới điều này. Trong bài ấy có ý muốn giúp các bạn sửa đổi phong cách viết code. Nhưng vì thói quen của các bạn ở đây chỉ chuyên về "hiệu quả" cho nên bạn ấy không đề cập đến việc sì tin viết code nữa. Và hình như bạn ấy đã rút lui khỏi diễn đàn - chán nản chăng?)