2. Cấu trúc dữ liệu
Ở các bài trước, chúng ta đã làm việc với các mảng 1 chiều (vector) và 2 chiều (matrix). Trong MATLAB các kiểu dữ liệu mảng này có các tính chất:
Số chiều của mảng (bạn có thể lập những mảng n chiều)
Mỗi phần tử của mảng này có cùng kiểu (nguyên, thực, kí tự, ...)
Mảng là một cấu trúc tiết kiệm không gian nhớ và thuận lợi cho tính toán.
Những ma trận lớn có nhiều phần tử 0 (ma trận thưa) có thể được lập thành bởi lệnh sparse. Ví dụ:
>> a = zeros(100); a(1,3) = 10; a(21,5) = pi; b = sparse(a);
Ở một số trường hợp, ta cần có các cấu trúc dữ liệu phức tạp hơn
cell array: giống với kiểu mảng thường, nhưng các phần tử trong mảng không cần phải có chung kiểu
structs: cấu trúc dữ liệu trừu tượng gồm nhiều kiểu dữ liệu hợp lại. Thường dùng trong lập trình hướng đối tượng.
Cell
Cell giống như một ma trận, nhưng mỗi phần tử của ma trận này có thể chứa một loại dữ liệu riêng (có thể là một ma trận khác)
Ví dụ: Một cell có thể chứa tên người, tuổi, tuổi của những đứa con của họ. Trong khi đó nếu sử dụng matrix, ta cần 3 biến ma trận, mỗi ma trận có 3 phần tử để lưu những dữ liệu trên.
Cách khai báo và sử dụng một cell:
Để tạo một cell, dùng từ khóa cell và chỉ rõ kích thước của cell.
>> a = cell(3, 10) % a sẽ là một cell với 3 hàng, 10 cột
Hoặc có thể khai báo bằng cách liệt kê các phần tử của cell trong dấu ngoặc { }
>> c={'hello world',[1 5 6 2],rand(3,2)}; % c là một cell có 1 hàng, 3 cột
Mỗi phần tử của cell có thể là mọi loại dữ liệu
Để truy cập đến từng phần tử của cell, dùng dấu { }
>> a{1,1}=[1 3 4 -10];
>> a{2,1}='hello world 2';
>> a{1,2}=c{3};
Struct:
struct cho phép bạn và lưu một tập các biến liên quan (trong các field) và giữ chúng trong cùng 1 biến (struct là kiểu dữ liệu giống trong C)
Để khởi tạo một struct:
>> s=struct([]); % size(s) là 1x1. Việc khởi tạo các biến trong struct là không bắt buộc,
% tuy nhiên với các struct lớn bạn nên khởi tạo trước khi sử dụng.
Để thêm một field trong struct:
>> s.name = 'Jack Bauer';
>> s.scores = [95 98 67];
>> s.year = 'G3';
field có thể là matrix, cell, hoặc là một struct khác
Để xem thêm về struct, gõ doc struct
Ví dụ khởi tạo và sử dụng struct:
>> ppl=struct('name',{'John','Mary','Leo'},'age',{32,27,18},'childAge',{[2;4],1,[]});
% ppl là một mảng gồm 3 struct, mỗi struct có 3 field dữ liệu là name, age và childAge
% chú ý rằng các cell ở khởi tạo trên phải có cùng kích thước
>> person = ppl(2) % biến person giờ là 1 struct
>> person.name % trả về Mary
>> ppl(1).age % trả về 32
Truy cập vào struct
với struct, để truy cập vào dữ liệu cần truy cập thông qua tên field
>> stu = s.name;
>> scor = s.scores;
Để truy cập một mảng nx1 struct, dùng chỉ số
>> person = ppl(2); % person là 1 struct với các field name, age và Childage
>> personName=ppl(2).name;
>> a=[ppl.age];