Translate

Thứ Hai, 10 tháng 9, 2012

Nhập hai mảng 1 chiều thành một mảng 2 chiều (VB6)


Có câu hỏi như trên ở forum chuyên VB, câu trả lời nhanh là khai một mảng 2 chiều và lần lượt gán trị từ hai mảng nhờ vòng lặp.
Câu trả lời trên coi như là kinh điển, code dễ hiểu, thực hiện nhanh khi mảng nhỏ.

Tuy nhiên ta do dự với cách làm trên khi:
1- Liệu có còn nhanh khi mảng có số phần tử khá lớn, giá trị các phần tử phức tạp, vd giá trị là String khá dài.
2- Dù sao thấy vòng lặp gán từng phần tử, cảm giác không êm lắm

Vì thế nên tôi viết đoạn code sau đây...

Function NhâpThànhMang2Chiêu(XX As Variant, YY As Variant) As Variant
    Dim EA As Object, m%
    If UBound(XX) > UBound(YY) Then m = UBound(XX) + 1 Else: m = UBound(YY) + 1
    With CreateObject("Excel.Application")
        .WorkBooks.Add
        .Range(.Cells(1, 1), .Cells(m, 1)).Value = .WorksheetFunction.Transpose(XX)
        .Range(.Cells(1, 2), .Cells(m, 2)).Value = .WorksheetFunction.Transpose(YY)
    NhâpThànhMang2Chiêu = .Range(.Cells(1, 1), .Cells(m, 2)).Value
    ' truongphu@caulacbovb.com
    .WorkBooks(1).Close False
    .quit
    End With
End Function

Sử dụng:

Private Sub Command1_Click()
    Dim AA As Variant, BB As Variant, CC As Variant
        AA = Array(1, 2, 3, 4, 5)
        BB = Array("a", "b", "c", "d", "e")
    CC = NhâpThànhMang2Chiêu(AA, BB)
    MsgBox CC(3, 2) ' hàng 3 côt 2, kêt qua là "c"
End Sub

Lưu ý là mảng nhập chung, cận dưới các chiều (LBound) luôn luôn là 1

1 nhận xét:

Trực tuyến

Mục lục Toàn bộ (theo thứ tự thời gian)

Trực tuyến