61
Chương 2: Thao tác dữ liệu
ầu hết các ứng dụng đều cần thao tác trên một loại dữ liệu nào đó. Microsoft .NET
Framework cung cấp nhiều kỹ thuật để đơn giản hóa hay nâng cao hiệu quả các
thao tác dữ liệu thông dụng. Chương này sẽ đề cập các kỹ thuật sau:
H
Thao tác chuỗi một cách hiệu quả (mục 2.1).
Mô tả các kiểu dữ liệu cơ sở bằng các kiểu mã hóa khác nhau (mục 2.2, 2.3, và 2.4).
Sử dụng biểu thức chính quy để xác nhận tính hợp lệ và thao tác chuỗi (mục 2.5 và
2.6).
Làm việc với ngày và giờ (mục 2.7 và 2.8).
Làm việc với mảng và tập hợp (mục 2.9, 2.10, và 2.11).
Tuần tự hóa trạng thái đối tượng và lưu nó vào file (mục 2.12).
1.
1.
Thao tác chu i m t cách hi u qu
ỗ ộ
ệ
ả
Thao tác chu i m t cách hi u qu
ỗ ộ
ệ
ả
Bạn cần thao tác trên nội dung của một đối tượng
String
và tránh chi phí của
việc tự động tạo các đối tượng
String
mới do tính không đổi của đối tượng
String
.
Sử dụng lớp
System.Text.StringBuilder
để thực hiện các thao tác, sau đó chuyển
kết quả thành
String
bằng phương thức
StringBuilder.ToString
.
Các đối tượng
String
trong .NET là không đổi, nghĩa là một khi đã được tạo thì chúng không
thể bị thay đổi. Ví dụ, nếu bạn tạo một
String
bằng cách nối một số ký tự hoặc chuỗi, thì khi
thêm một phần tử mới vào cuối
String
hiện có, bộ thực thi sẽ tạo ra một
String
mới chứa kết
quả (chứ không phải
String
cũ bị thay đổi). Do đó sẽ nảy sinh chi phí đáng kể nếu ứng dụng
của bạn thường xuyên thao tác trên
String
.
Lớp
StringBuilder
khắc phục vấn đề này bằng cách cung cấp một bộ đệm ký tự, và cho phép
thao tác trên nội dung của nó mà bộ thực thi không phải tạo đối tượng mới để chứa kết quả
sau mỗi lần thay đổi. Bạn có thể tạo một đối tượng
StringBuilder
rỗng hoặc được khởi tạo là
nội dung của một
String
hiện có. Sau đó, thao tác trên nội dung của
StringBuilder
này bằng
các phương thức nạp chồng (cho phép bạn chèn, thêm dạng chuỗi của các kiểu dữ liệu khác
nhau). Cuối cùng, gọi
StringBuilder.ToString
để chuyển nội dung hiện tại của
StringBuilder
thành một
String
.
Khi bạn thêm dữ liệu mới vào chuỗi, có hai thuộc tính quan trọng ảnh hưởng đến hoạt động
của
StringBuilder
là
Capacity
và
Length
.
Capacity
mô tả kích thước của bộ đệm
StringBuilder
, còn
Length
mô tả kích thước của chuỗi ký tự trong bộ đệm. Nếu việc thêm dữ
liệu mới vào
StringBuilder
làm kích thước chuỗi (
Length
) vượt quá kích thước bộ đệm
(
Capacity
) thì
StringBuilder
sẽ cấp phát bộ đệm mới để chứa chuỗi. Nếu thiếu cẩn thận, việc
cấp phát bộ đệm này có thể phủ định lợi ích của việc sử dụng
StringBuilder
. Do đó, nếu biết
chính xác kích thước của chuỗi, hoặc biết kích thước tối đa của chuỗi, bạn có thể tránh việc
cấp phát bộ đệm quá mức cần thiết bằng cách thiết lập thuộc tính
Capacity
hoặc chỉ định kích
thước bộ đệm lúc tạo
StringBuilder
. Khi thiết lập các thuộc tính
Capacity
và
Length
, cần chú
ý các điểm sau: