• 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
User avatar
truongphu
VIP
VIP
Posts: 4764
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Chia một mảng thành hai

Postby truongphu » Thu 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:

Code: Select all

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:

Code: Select all

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
Last edited by truongphu on Thu 31/05/2012 3:40 pm, edited 1 time in total.


o0o--truongphu--o0o

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

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

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

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

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

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

Postby truongphu » Thu 31/05/2012 2:22 pm

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

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

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

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

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

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

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

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

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

Postby truongphu » Sat 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

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

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

Postby truongphu » Mon 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


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

Who is online

Users browsing this forum: No registered users and 0 guests