Trang 1 trên 1

Gán giá trị cho mảng

Đã gửi: T.Sáu 24/07/2009 10:32 am
gửi bởi alexanderdna
Thủ thuật: Gán giá trị cho mảng
Tác giả: alexanderdna
Mô tả: Một giải pháp gán giá trị cho nhiều phần tử của mảng cùng một lúc


Chào các cô các bác các anh chị em! :) Alex mới tham gia diễn dàn được một vài bữa, mong chư vị ủng hộ.
Alex mới nghĩ ra một cách gán giá trị cho mảng (một chiều) nhanh, gọn và uyển chuyển.
Trước hết phải nói về cách gán giá trị "truyền thống".
1. Gán từng phần tử:

Mã: Chọn hết

  1. MyArray(0) = "Ha Noi"
  2. MyArray(1) = "Hue"
  3. MyArray(2) = "Saigon"

2. Gán bằng vòng lặp:

Mã: Chọn hết

  1. For i = 0 To UBound(MyArray)
  2.     MyArray(i) = i
  3. Next


Nhưng hai cách trên một cái thì linh hoạt nhưng dài dòng, cái kia gọn nhưng lại lệ thuộc bộ lặp. Nay ta kết hợp hai ưu điểm (gọn và linh hoạt) vào một giải pháp như sau:

Mã: Chọn hết

  1. Sub AlterArray(DestArray() As Byte, ParamArray Values() As Variant)
  2.     'Chỉnh lại độ lớn của mảng
  3.     ReDim DestArray(UBound(Values))
  4.     Dim i As Integer
  5.     'Gán các giá trị
  6.     For i = 0 To UBound(Values)
  7.         DestArray(i) = CByte(Values(i))
  8.     Next
  9. End Sub


Sử dụng:

Mã: Chọn hết

  1. Dim MyArray() As Byte
  2. AlterArray MyArray, 0, 1, 2, 3, 4 'Muốn bao nhiêu giá trị cũng được

Lưu ý:
1. Ở đây ví dụ xài kiểu Byte, có thể dùng kiểu dữ liệu khác.
2. Tham số thứ nhứt của hàm AlterArray là tên mảng cần gán giá trị, tiếp theo là các giá trị, bắt đầu từ phần tử 0.
3. Có thể sửa lại để gán từ phần tử khác 0, cái này để dành cho chư vị tìm hiểu ;)

Re: Gán giá trị cho mảng

Đã gửi: T.Sáu 24/07/2009 2:06 pm
gửi bởi xuanquy_th
Một cách nữa.
Dim MyArray() As Byte = {0, 1, 2, 3, 4,....}
Sử dụng trên ngôn ngữ vb2005 :D

Re: Gán giá trị cho mảng

Đã gửi: T.Sáu 24/07/2009 2:43 pm
gửi bởi truongphu
alexanderdna đã viết:Alex mới nghĩ ra một cách gán giá trị cho mảng (một chiều) nhanh, gọn và uyển chuyển.


1- Nếu không khắt khe về biến, bạn có thể dùng hàm Split

vd1:

Mã: Chọn hết

  1. Dim MyArray() as String
  2. MyArray = Split("Hanoi, Hue, Saigon", ",")


vd2:

Mã: Chọn hết

  1. Dim MyArray() As String
  2. MyArray = Split("1, 2, 3, 4, 5, 6", ",")

Trong vd2, nêu muốn dùng kiểu số thì bạn dùng thêm hàm Cbyte sau đó

2- Hoặc bạn dùng hàm Array

Mã: Chọn hết

  1. Dim MyArray
  2. MyArray = Array(1, 2, 3, 4, 5, 6)


Dù sao cũng hoan nghênh bạn đã viết bài, cứ xem như bài tập để trao đổi học hỏi thêm
Thân

Re: Gán giá trị cho mảng

Đã gửi: T.Bảy 25/07/2009 8:36 am
gửi bởi alexanderdna
Gửi xuanquy_th: à, cố nhiên là trên .NET có thể dùng cú pháp đó, nhưng Alex đang bàn về mảng trên VB6. Cám ơn bạn.
Gửi bác truongphu: trời ơi, con bậy quá! :(( Có cái phát biểu Array mà cũng quên mất. Nhưng con vừa thử thì thấy mảng MyArray phải có kiểu Variant, nếu dùng kiểu khác thì sẽ gặp lỗi "Type mismatch" do tính chất của ParamArray. Hàm AlterArray do con mạo muội chế ra :P thì (hình như) không gặp lỗi này. Dù sao con cũng cám ơn bác đã nhắc.

Re: Gán giá trị cho mảng

Đã gửi: T.Năm 27/08/2009 6:55 pm
gửi bởi delta_hung1992
Cho cháu hỏi: hàm UBound dùng để kiểm tra biên của mảng >=2 chiều được không ạ?

Re: Gán giá trị cho mảng

Đã gửi: T.Bảy 29/08/2009 11:15 am
gửi bởi alexanderdna
Hình như UBound chỉ trả về biên của chiều thứ nhất mà thôi.

Re: Gán giá trị cho mảng

Đã gửi: T.Sáu 23/03/2012 3:44 pm
gửi bởi quangtung1123
các anh cho em hỏi, trong VB6 có cách nào ghép 2 mảng lại thành 1 mảng không?
Ví dụ mảng a có các phần tử; 1 2 3
mảng b có các phần tử; 4 5 6 7
Ghép lại thành mảng c có các phần tử; 1 2 3 4 5 6 7
Cảm ơn các anh nhiều!

Re: Gán giá trị cho mảng

Đã gửi: T.Bảy 24/03/2012 10:25 am
gửi bởi NoBi
Chỉ có dùng vòng lặp rồi ghép từng giá trị của mảng này vào mảng kia thôi.

Re: Gán giá trị cho mảng

Đã gửi: T.Bảy 24/03/2012 2:51 pm
gửi bởi truongphu
NoBi đã viết:Chỉ có dùng vòng lặp rồi ghép từng giá trị của mảng này vào mảng kia thôi.


có cách khác mà ít ai dùng: định nghĩa một type:
  1. Private Type QQQ
  2. yyy() As Byte
  3. zzz() As Byte
  4. End Type
  5.  
  6. Private Sub Form_Load()
  7. Dim AA(1) As Byte
  8. AA(0) = 8
  9. AA(1) = 2
  10. Dim BB(1) As Byte
  11. BB(0) = 5
  12. BB(1) = 4
  13. Dim CC As QQQ
  14. CC.yyy = AA
  15. CC.zzz = BB
  16. End Sub


Đương nhiên CC chứa các phần tử của AA() và BB()