[Nhờ giúp đỡ] Code xóa các phần tử liên tiếp trùng nhau trong mảng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

NguyenNgocSon

KEEP WALKING
Tham gia
4/4/08
Bài viết
280
Được thích
833
Nghề nghiệp
Ths. Cầu hầm
Giả sử tôi có bài toán sau:
Dữ liệu: 6.52,12.35,3.23,6.89,6.89
=>Kết quả: 6.52,12.35,3.23
Dữ liệu:6.52,12.35,3.23,5.89,6.89
=>Kết quả:6.52,12.35,3.23,5.89
Mục đích là xóa các phần tử liên tiếp trùng nhau.
Tôi đã dùng hàm như sau:
PHP:
Function RemoveData(ByRef X() As Double)
Dim i, j As Integer
For i = 0 To UBound(X) - 1
 For j = i + 1 To UBound(X)
    If X(i) = X(j) Then
    X(j) = X(j + 1)
    End If
 Next j
Next i
RemoveData = X
End Function
Nhưng kết quả không mong muốn
Mong sự giúp đỡ
Cám ơn !
 
Giả sử tôi có bài toán sau:
Dữ liệu: 6.52,12.35,3.23,6.89,6.89
=>Kết quả: 6.52,12.35,3.23
Dữ liệu:6.52,12.35,3.23,5.89,6.89
=>Kết quả:6.52,12.35,3.23,5.89
Mục đích là xóa các phần tử liên tiếp trùng nhau.
Tôi đã dùng hàm như sau:
PHP:
Function RemoveData(ByRef X() As Double)
Dim i, j As Integer
For i = 0 To UBound(X) - 1
 For j = i + 1 To UBound(X)
    If X(i) = X(j) Then
    X(j) = X(j + 1)
    End If
 Next j
Next i
RemoveData = X
End Function
Nhưng kết quả không mong muốn
Mong sự giúp đỡ
Cám ơn !
Đoán đại:
PHP:
Function RemoveData(ByVal X As Variant)
  Dim aTmp, tmp, Arr()
  Dim bChk As Boolean
  Dim i As Long, n As Long
  aTmp = X
  If IsArray(aTmp) Then
    For i = LBound(aTmp) To UBound(aTmp)
      If tmp <> aTmp(i) Then
        bChk = False
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = aTmp(i)
        tmp = aTmp(i)
      Else
        If bChk = False Then
          n = n - 1
          If n <= 0 Then
            ReDim Arr(1 To 1)
            n = 0
          Else
            ReDim Preserve Arr(1 To n)
            bChk = True
          End If
        End If
      End If
    Next i
    If n Then RemoveData = Arr
  End If
End Function
Test thử xem nhé
 
Upvote 0
Ví dụ dãy số sau:
30.9526,44.2969,58.6445,75.5003,75.5003,88.4433,106.4028,106.4028,88.0140,58.8806
Như vậy là thiếu số màu đỏ
Kết quả đúng
30.9526,44.2969,58.6445,75.5003,88.4433,106.4028,88.0140,58.8806

Vậy cuối cùng bạn muốn sao?
- Trùng thì bỏ hết
hay
- Trùng thì lấy một
Bài 1 chẳng phải bạn cho ví dụ như vầy:
Giả sử tôi có bài toán sau:
Dữ liệu: 6.52,12.35,3.23,6.89,6.89
=>Kết quả: 6.52,12.35,3.23
2 thằng em cuối cùng bị trùng ta bỏ luôn đó sao
-----------
Nói thêm: Nếu muốn TRÙNG THÌ LẤY MỘT (tức lọc Unique) thì bài toán này đã có đầy trên GPE rồi, khỏi viết gì cả ---> Tìm đi
 
Upvote 0
Ví dụ dãy số sau:
30.9526,44.2969,58.6445,75.5003,75.5003,88.4433,106.4028,106.4028,88.0140,58.8806
Như vậy là thiếu số màu đỏ
Kết quả đúng
30.9526,44.2969,58.6445,75.5003,88.4433,106.4028,88.0140,58.8806

Eo ơi bạn nhìn lại bài 1 của bạn đi, cũng may là mình chưa gởi code lên
 
Upvote 0
Eo ơi bạn nhìn lại bài 1 của bạn đi, cũng may là mình chưa gởi code lên

Nói thật, nếu tác giả muốn Unique thì tôi.. cóc thèm làm (có đầy rồi)
Tại thấy yêu cầu TRÙNG BỎ HẾT cũng hay hay nên.. thử lửa ---> Cuối cùng là.. TRẬT LẤT
 
Upvote 0
Xin lối đã post thiếu. Nếu trùng thì xóa 1
Lọc Unique trong excel nhưng em muốn code để áp dụng vào bài toán đặc thù trong AutoCad.
Rất xin lỗi !
 
Lần chỉnh sửa cuối:
Upvote 0
Ví dụ dãy số sau:
30.9526,44.2969,58.6445,75.5003,75.5003,88.4433,106.4028,106.4028,88.0140,58.8806
Như vậy là thiếu số màu đỏ
Kết quả đúng
30.9526,44.2969,58.6445,75.5003,88.4433,106.4028,88.0140,58.8806
Bạn thử thế này coi sao
PHP:
Function Remove(Cell As Range)
On Error Resume Next
Dim kq, i As Byte, tam
tam = Split(Cell, ",")
For i = 0 To UBound(tam)
   If tam(i) <> tam(i + 1) Then
      kq = kq & tam(i) & ","
   End If
Next
Remove = Left(kq, Len(kq) - 1)
End Function
 
Upvote 0
Nếu dữ liệu dạng mảng
X(100) thì vấn đề xử lý code ra sao ?
 
Upvote 0
Nếu dữ liệu dạng mảng
X(100) thì vấn đề xử lý code ra sao ?
Mình chỉ biết sơ sơ vài đường cơ bản toàn mì ăn liền thôi. Thấy dữ liệu, so sánh với yêu cầu thì sẽ có cách ra kết quả. Còn những dạng nếu hay giả sử vì đó thì mình chịu thua
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom