• 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

Chia một mảng thành hai

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
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: 509 time

Chia một mảng thành hai

Gửi bàigửi bởi truongphu » T.Năm 31/05/2012 12:26 am

Thủ thuật: Chia một mảng thành hai
Tác giả: truongphu-VuVanHoanh
Mô tả: Chia một mảng thành hai mảng!
Chưa thấy trong lịch sử VB6 nha.



Code:

Mã: Chọn hết

Dim MM() As String

Private Sub Form_Load()
    ReDim MM(99)
    Dim i%
    For i = 0 To 99
        MM(i) = i
        If i < 50 Then MM(i) = "00" & MM(i)
    Next
End Sub


Hỏi:

Mã: Chọn hết

Private Sub Command1_Click()

End Sub


Ở sub command1 làm sao có được 2 mảng được tách ra từ mảng MM đã tạo ở Form_Load, mảng đầu có 50 phần tử trước và mảng sau có 50 phần tử sau.

Không dùng vòng lặp để thực hiện #:-S
:-w
Sửa lần cuối bởi truongphu vào ngày T.Năm 31/05/2012 3:40 pm với 1 lần sửa.


o0o--truongphu--o0o

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

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: Chia một mảng thành hai

Gửi bàigửi bởi VuVanHoanh » T.Năm 31/05/2012 2:04 pm

:|
  1. Private Sub Command1_Click()
  2.     Dim n1() As String, n2() As String
  3.     n1 = Filter(mm, "00") '50 phần tử đầu: 0000 -> 0049
  4.    n2 = Filter(mm, "00", False) '50 phần tử sau: 50->99
  5. End Sub
  6.  
Since 2008...
One love! :x

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: 509 time

Re: Chia một mảng thành hai

Gửi bàigửi bởi truongphu » T.Năm 31/05/2012 2:22 pm

VuVanHoanh đã viết:Private Sub Command1_Click()
    Dim n1() As String, n2() As String
    n1 = Filter(mm, "00") '50 phần tử đầu: 0000 -> 0049
   n2 = Filter(mm, "00", False) '50 phần tử sau: 50->99
End Sub


Rất xuất sắc!
Đã tinh ý nhận ra chuỗi "00" được ghép vào!
Thưởng 1 cú cảm ơn, OK? :D

Kết luận:
Nếu mảng khi tạo thành được "dánh dấu", ta có thể chia mảng thành nhiều mảng nhỏ hơn.
Riêng Mảng các phần tử đầu, có thể dùng ReDim PreServe

Bài viết nầy có thể xem là Thủ thuật, Tác giả là tp-vvh
o0o--truongphu--o0o

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

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: Chia một mảng thành hai

Gửi bàigửi bởi VuVanHoanh » T.Năm 31/05/2012 2:40 pm

Mở rộng ra nó sẽ là 1 phương pháp tìm kiếm k sử dụng vòng lặp ;)
tks bác ;)
Since 2008...
One love! :x

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: 509 time

Re: Chia một mảng thành hai

Gửi bàigửi bởi truongphu » T.Năm 31/05/2012 3:44 pm

Bổ sung thêm:
Hàm Filter hoạt động trên mảng String.
Trong thực tế, ta có các mảng SỐ

Trường hợp mảng số, ta tạm thời dùng mảng string thay thế;
Việc thêm các dãy số 0 ở trước để khi sử dụng, giá trị số vẫn giữ nguyên.

Nhờ Điều hành chuyển bài viết vào Box Thủ Thuật - Chuỗi
cảm ơn quý ĐH
o0o--truongphu--o0o

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

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: 509 time

Tổng quát cho trường hợp tách mảng String MS() thành 2 mảng

Gửi bàigửi bởi truongphu » T.Bảy 02/06/2012 7:25 pm

Tổng quát cho trường hợp tách mảng String MS() thành 2 mảng M() và S()
-------
Mảng String MS() được tạo ra tùy ý, không đánh dấu trước.
-------

1- Dùng Join để tạo ra một biến String JS từ mảng String MS()
2- Dùng Split để tách biến String JS trên với dấu phân cách tùy chọn là phần tử MS(n); trong đó n là vị trí muốn cắt.
với kết quả là mảng String Temp() với 2 phần tử.
3- Dùng Split để tạo ra mảng S() từ phần tử Temp(1)
4- Dùng ReDim Preserve để tạo mảng M(n) từ mảng MS()
o0o--truongphu--o0o

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

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: 509 time

Loại bỏ các Item đầu tiên trong mảng số

Gửi bàigửi bởi truongphu » T.Hai 17/09/2012 8:50 am

Thấy javascript có hàm loại bỏ phần tử của mảng [splice Method (JScript 5.6)]
mà VB6 chỉ cho phép loại bỏ các phần tử phía sau qua ReDim phối hợp Preserve

Bây giờ ta loại bỏ phần tử đầu với CopyMemory đưa lần lượt sau lên trước (không vòng lặp)
Với 3 trường hợp BYTE, INTEGER, LONG

  1. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  2.  
  3. Private Sub Command1_Click()
  4.     Dim AA(9) As Byte ' 0 1 2 3 4 5 6 7 8 9
  5.    Dim Z$
  6.     For i = 0 To 9
  7.         AA(i) = i
  8.         Z = Z & " " & AA(i)
  9.     Next
  10.     MsgBox Z
  11.  
  12.     Dim BB(8) As Byte ' Bo elements 0
  13.    Z = ""
  14.     CopyMemory BB(0), AA(1), 9 '(9*1)
  15.    For i = 0 To 8
  16.         Z = Z & " " & BB(i)
  17.     Next
  18.     MsgBox Z
  19. End Sub
  20.  
  21. Private Sub Command2_Click()
  22.     Dim AA(9) As Byte
  23.     Dim Z$
  24.     For i = 0 To 9
  25.         AA(i) = i
  26.         Z = Z & " " & AA(i)
  27.     Next
  28.     MsgBox Z
  29.    
  30.     Dim BB(4) As Byte ' Bo cac element 0 1 2 3 4
  31.    Z = ""
  32.     CopyMemory BB(0), AA(5), 5 ' (5*1)
  33.    For i = 0 To 4
  34.         Z = Z & " " & BB(i)
  35.     Next
  36.     MsgBox Z
  37. End Sub
  38.  
  39. Private Sub Command3_Click()
  40.     Dim AA(9) As Integer  ' 10 elements
  41.    Dim Z$
  42.     For i = 0 To 9
  43.         AA(i) = i
  44.         Z = Z & " " & AA(i)
  45.     Next
  46.     MsgBox Z
  47.  
  48.     Dim BB(8) As Integer ' Bo elements 0
  49.    Z = ""
  50.     CopyMemory BB(0), AA(1), 9 * 2
  51.     For i = 0 To 8
  52.         Z = Z & " " & BB(i)
  53.     Next
  54.     MsgBox Z
  55. End Sub
  56.  
  57. Private Sub Command4_Click()
  58.     Dim AA(9) As Integer
  59.     Dim Z$
  60.     For i = 0 To 9
  61.         AA(i) = i
  62.         Z = Z & " " & AA(i)
  63.     Next
  64.     MsgBox Z
  65.    
  66.     Dim BB(4) As Integer ' Bo cac element 0 1 2 3 4
  67.    Z = ""
  68.     CopyMemory BB(0), AA(5), 5 * 2
  69.     For i = 0 To 4
  70.         Z = Z & " " & BB(i)
  71.     Next
  72.     MsgBox Z
  73. End Sub
  74.  
  75. Private Sub Command5_Click()
  76.     Dim AA(9) As Long   ' 10 elements
  77.    Dim Z$
  78.     For i = 0 To 9
  79.         AA(i) = i
  80.         Z = Z & " " & AA(i)
  81.     Next
  82.     MsgBox Z
  83.  
  84.     Dim BB(8) As Long ' Bo elements 0
  85.    Z = ""
  86.     CopyMemory BB(0), AA(1), 9 * 4
  87.     For i = 0 To 8
  88.         Z = Z & " " & BB(i)
  89.     Next
  90.     MsgBox Z
  91. End Sub
  92.  
  93. Private Sub Command6_Click()
  94.     Dim AA(9) As Integer
  95.     Dim Z$
  96.     For i = 0 To 9
  97.         AA(i) = i
  98.         Z = Z & " " & AA(i)
  99.     Next
  100.     MsgBox Z
  101.    
  102.     Dim BB(4) As Integer ' Bo cac element 0 1 2 3 4
  103.    Z = ""
  104.     CopyMemory BB(0), AA(5), 5 * 4
  105.     For i = 0 To 4
  106.         Z = Z & " " & BB(i)
  107.     Next
  108.     MsgBox Z
  109. End Sub


Hay không? B-)

Như vậy với 2 bài viết trên liền kề, ta có thể tạo ra một mảng mới tùy ý (String hay Numeric) từ mảng đầu tiên, bỏ khúc đầu hay bỏ khúc sau đều được cả!
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