• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Gán giá trị cho mảng

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

Gán giá trị cho mảng

Gửi bàigửi bởi alexanderdna » T.Sáu 24/07/2009 10:32 am

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 ;)



Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 792
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

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

Gửi bàigửi bởi xuanquy_th » T.Sáu 24/07/2009 2:06 pm

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
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 510 time

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

Gửi bàigửi bởi truongphu » T.Sáu 24/07/2009 2:43 pm

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
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

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

Gửi bàigửi bởi alexanderdna » T.Bảy 25/07/2009 8:36 am

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.

Hình đại diện của người dùng
delta_hung1992
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 81
Ngày tham gia: T.Năm 06/11/2008 10:51 pm

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

Gửi bàigửi bởi delta_hung1992 » T.Năm 27/08/2009 6:55 pm

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 ạ?
Keep moving forward

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

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

Gửi bàigửi bởi alexanderdna » T.Bảy 29/08/2009 11:15 am

Hình như UBound chỉ trả về biên của chiều thứ nhất mà thôi.

quangtung1123
Bài viết: 5
Ngày tham gia: T.Sáu 02/03/2012 9:09 pm

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

Gửi bàigửi bởi quangtung1123 » T.Sáu 23/03/2012 3:44 pm

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!

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 951
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » T.Bảy 24/03/2012 10:25 am

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.
:>

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 510 time

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

Gửi bàigửi bởi truongphu » T.Bảy 24/03/2012 2:51 pm

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()
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách