Mảng
là tập hợp nhiều giá trị có cùng kiểu dữ liệu
Đây
là mảng số
let data = [1, 2,3, 4,5]
Mảng các chữ.
let data2 = ["Thứ hai","Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy", "Chủ nhật" ]mảng các
chữ
var mang = [String](count: 12, repeatedValue: " ")
var mang2 = [Int](count: 12, repeatedValue: 0)
Ta khai báo mảng kèm luôn số phần tử, các dữ liệu đại diện, 0 tức
là mảng số, dấu cách trắng là mảng chuỗi.
Để cho phần từ vaò mảng, ta dùng lệnh append
mang.append("Thứ hai");
mang2.append(9);
Để lấy kích thước mảng
let
kichthuoc=data.count
Gõ lệnh for để tính tổng các giá trị lẻ trong mảng data
for i in0..<5 {
if(data[i]%2==1){
tong=tong+data[i]
}
}
Kết qua chạy ra là 9, hãy so sánh với bài 1, cũng là từ 0 đến 4 mà
bài 1 ra kết quả tổng lẻ có 4 là sao?
Đó là vì ở bài 1 ta cộng các số lẻ từ 0 đến 4 thì chỉ có 1 và 3.
Còn đây ta cộng các vị trí trong mảng, với i=0 là vị trí đầu, giá trị 1, i=4 là
vị trí 5, giá trị 5.
Vậy hãy cẩn thận với chỉ số mảng, i luôn nhỏ hơn kích thước mảng 1
đơn vị. Mảng có 10 phần tử, i lớn nhất là 9. Vòng lặp for với mảng rất hay bị
nhầm kích thước mảng,cần chú ý.
Nếu
bạn sửa chỗ %2==1 thành %2==0, nó sẽ in ra tổng các số chẵn, kết quả là 6
Dòng
tong=tong+data[i]; có nghĩa là ta cộng dồn các giá trị
tong, các giá trị sau được cộng luôn vào giá trị trước. Giả sử sau lần chạy đầu
tiên, i=0 ta được giá trị 1, tiếp theo được giá trị 3, thì nó sẽ cộng luôn vào
1 thành 4, cứ như vậy đến cuối cùng ta có tổng của toàn bộ các số thỏa mãn yêu
cầu của lệnh if.
Dòng tong=tong +data[i] hay được viết như sau tong+=data[i];
Cách viết này rất phổ biến nhưng nhìn hơi khó hiểu, bạn cứ nên viết
rõ ra có 2 chữ tong hai bên sẽ dễ nhìn hơn.
Hãy
thêm vào mảng data các số 35,88
Nếu muốn biết vị trí của số 35 trong mảng data, ta dùng lệnh for
duyệt tất cả các phần tử
for i in0..<data.count {
if(data[i]==35){
vitri=i+1
}
}
Giá
trị in ra sẽ là 6, cộng thêm 1 vào i vì trong mảng, i=0 là số thứ nhất.
Giả
sử ta muốn đếm xem có bao nhiêu số chia hết cho 5 trong mảng data.
var dem=0
for i in0..<data.count {
if(data[i]%5==0){
dem=dem+1
}
}
Khi
chạy for, cứ mỗi khi có một phần tử chia hết cho 5 thì biến dem lại tăng lên 1
đơn vị, kết quả ra 2.
Ta
thử tìm số lớn nhất trong mảng này, copy đoạn code sau vào
var max=data[0]
for i in0..<data.count {
if(data[i]>max){
max=data[i]
}
}
Hãy
xem lệnh for, ban đầu ta khai báo biến max và gán luôn giá trị là phần tử đầu tiên
của mảng. Sau đó chạy for để so sánh từng giá trị của mảng với max, nếu có giá
trị lớn hơn, gán giá trị đó cho max.
Với
mảng 2 chiều, ta khai báo nó như sau
let mang3 = [[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5] ]
Đó là mảng có 3 dòng, mỗi dòng có 5 phần tử, phần tử ở dòng đầu
tiên, cột thứ 3 sẽ được viết là mang3[0][2], đó là số 3
Hoặc ta chỉ khai báo số dòng, cột, kiểu giá trị của mảng
var mang4 = Array(count: 2, repeatedValue:Array(count:3,repeatedValue:
" "))
Đó là mảng có 2 dòng, mỗi dòng có 3 phần tử, ta thêm các giá trị
vào
mang4[0][0]=4;
mang4[0][1]=8;
mang4[0][2]=6;
mang4[1][0]=5;
mang4[1][1]=9;
mang4[1][2]=3;
Lúc này các phần tử mảng trông sẽ như sau
4 8 6
5 9 3
Phần tử ở dòng đầu tiên, cột thứ 3 sẽ được viết là mang4[0][2], đó
là số 6.
Để tính tổng các
phần tử trong mang4, ta dùng vòng lặp for kép
var tong2=0
for i in0..<2 {
for j in0..<3 {
tong2=tong2+mang4[i][j]
}
}
Kết quả ra 35
Vòng
for kép không dễ hiểu, hãy nghĩ như sau:
Đầu
tiên cho i=0, chạy for đơn bên dưới với j từ 0 đến 2 để cộng dòng 1
Tiếp
theo cho i=1, chạy for đơn bên dưới với j từ 0 đến 2 để cộng dòng 2
Vậy
nó là 2 lần, hoăc tổng quát là i lần chạy for đơn. Ở đây i biểu thị số dòng, với
i=0 nó cộng dòng 1, i=1 nó cộng dòng 2 của mảng.
Bạn
luôn nên đặt i ở ngoài, j ở trong để dễ hình dung khi khi gán i, j để hiểu nó.
For
kép chỉ dùng được khi bạn đã dùng quen for đơn, bạn hiểu lặp lại for đơn chính
là for kép, khi đó tự bạn biết khi nào buộc phải dùng nó.
Mảng
2 chiều hơi khó hình dung, dễ lẫn dòng, cột. Nhưng nó tiện để gán dữ liệu vào.
Khi làm ứng dụng, có những lúc bạn chỉ có thể dùng mảng 2 chiều vì mảng 1 chiều
là không đủ. Lúc đó tự bạn sẽ hình dung trong đầu ra cách để dùng nó. Vậy ban đầu,
cứ hiểu về mảng 1 chiều là được rồi.
Ta
sẽ xem thêm về chuỗi, tức các ký tự String
Đối
với chuỗi, lệnh cần biết nhất là chặt chuỗi, tức chia nhỏ ký tự ra
Giả
sử ta có chuỗi.
let chuoi="Đay la vi du, phan
chia chuoi, theo dau phay";
Ta có thể tạo một mảng bằng
cách chặt chuỗi như sau
let mang5 = a.componentsSeparatedByString(",")
Lúc
này mang5 tạo thành có 3 phần tử “Đay la vi du”, “ phan chia chuoi”,” theo dau
phay”
Để bỏ dấu cách trắng đầu chữ “ phan chia chuoi”, ta dùng lệnh
let bocach=mang5[1].characters.dropFirst()
let chuoi2=String(bocach)
Lúc đó kết quả là “phan chia chuoi” đã mất dấu cách ở đầu
Để đếm số ký tự của chuỗi, ta dùng lệnh characters.count
Chú
ý ký tự trắng cũng được tính là một ký tự.
Dùng
chuỗi để cắt thành mảng rất hay dùng trong thực tế lập trình.
Bài
tập
Tạo
một mảng các số bất kỳ, in ra tổng các số chia hết cho 3, 6, 9
Đếm
xem có bao nhiêu số chia hết cho 8.
Tìm
xem số 30 ở vị trí nào, nếu trong mảng không có số 30 thì sao.
In
ra giá trị nhỏ nhất của mảng.
Can
năm gồm có Giáp, Ất, Bính, Đinh, Mậu, Kỷ Canh, Tân, Nhâm, Quý.
12
địa chi gồm Tý, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi
Lấy
năm dương chia cho 10, số dư đổi thành can. Dư 1 là Tân, 2 Nhâm, 3 Quý, 4 Giáp,
5 Ất, 6 Bính, 7 Đinh, 8 Mậu, 9 Kỷ, 0 Canh.
Lấy
năm dương chia cho 12, số dư đổi thành chi. Dư 1 là Dậu, 2 Tuất, 3 Hợi, 4 Tý, 5
Sửu, 6 Dần, 7 Mão, 8 Thìn, 9 Tỵ, 10 Ngọ, 11 Mùi, 0 Thân.
Tính
để biết năm âm lịch từ năm dương.
Tôi
làm giúp bạn phần đổi ra can, bạn tự làm nốt phần đổi ra chi.
No comments:
Post a Comment