• 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
User avatar
alexanderdna
Guru
Guru
Posts: 214
Joined: Tue 14/07/2009 11:13 am
Location: Sài Gòn
Has thanked: 3 times
Been thanked: 15 times

Gán giá trị cho mảng

Postby alexanderdna » Fri 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ử:

Code: Select all

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

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

Code: Select all

  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:

Code: Select all

  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:

Code: Select all

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



User avatar
xuanquy_th
Guru
Guru
Posts: 803
Joined: Tue 05/08/2008 9:15 pm
Location: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 times
Contact:

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

Postby xuanquy_th » Fri 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!!!

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Fri 24/07/2009 2:43 pm

alexanderdna wrote: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:

Code: Select all

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


vd2:

Code: Select all

  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

Code: Select all

  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

User avatar
alexanderdna
Guru
Guru
Posts: 214
Joined: Tue 14/07/2009 11:13 am
Location: Sài Gòn
Has thanked: 3 times
Been thanked: 15 times

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

Postby alexanderdna » Sat 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.

User avatar
delta_hung1992
Thành viên năng nổ
Thành viên năng nổ
Posts: 81
Joined: Thu 06/11/2008 10:51 pm

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

Postby delta_hung1992 » Thu 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

User avatar
alexanderdna
Guru
Guru
Posts: 214
Joined: Tue 14/07/2009 11:13 am
Location: Sài Gòn
Has thanked: 3 times
Been thanked: 15 times

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

Postby alexanderdna » Sat 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
Posts: 5
Joined: Fri 02/03/2012 9:09 pm

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

Postby quangtung1123 » Fri 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!

User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

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

Postby NoBi » Sat 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.
:>

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Sat 24/03/2012 2:51 pm

NoBi wrote: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


Return to “[VB] Mẹo vặt khác”

Who is online

Users browsing this forum: No registered users and 2 guests