返回列表 上一主題 發帖

[發問] 如何移除陣列內重複的部分(STRING)

[發問] 如何移除陣列內重複的部分(STRING)

MyArray() ="XX","aa","ab",XX","ab"
如何可取得"XX","aa","ab"的值呢(不重複)
PKKO

回復 1# PKKO

試試看
  1. Option Explicit
  2. Sub EX()
  3.     Dim AR, D As Object, E As Variant
  4.     AR = Array("XX", "aa", "ab", "ab", "ab", "XX", "ab")
  5.     Set D = CreateObject("SCRIPTING.DICTIONARY")  '字典物件
  6.     For Each E In AR
  7.         D(E) = ""
  8.     Next
  9.     AR = D.KEYS
  10.     MsgBox Join(AR, vbLf)
  11.     Stop
  12.     MsgBox Join(D.KEYS, vbLf)  '同上
  13. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE

版大太強大了,完全可以使用
可否請教一下
For Each E In AR

        D(E) = ""

    Next

為何要讓每一個陣列內的D物件都變成""
Keys 方法 Returns an array containing all existing keys in a Dictionary object.
D.KEYS
實際上這個的意思不是很懂!
PKKO

TOP

回復 3# PKKO
為何要讓每一個陣列內的D物件都變成""
因為用不到啊
  1. Option Explicit
  2. Sub EX()
  3.     Dim d                   '建立一個變數
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     '***********************
  6.     d.Add "a", "Athens"     '加入一些關鍵字和項目
  7.     d.Add "b", "Belgrade"
  8.     d.Add "c", "Cairo"
  9.     MsgBox Join(d.items, vbLf) '項目
  10.     MsgBox Join(d.keys, vbLf)  '關鍵字
  11. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# GBKEE

感謝版大,已經了解,跑迴圈的用途是讓D物件會在陣列之內
在迴圈內讓值為"" 實際上只是items會變成""
不影響關鍵字,因此KEYS可以正常輸出,感恩!!
PKKO

TOP

回復 2# GBKEE

2014年的文章到了2020還是非常實用

這方法幫我解決陣列移除重複的問題

對於字典的用法不是很清楚
一直不懂為什麼
  1. For Each E In AR
  2.     D(E) = ""
  3. Next
  4. AR = D.KEYS
複製代碼
可以達到移除重複的效果

我看了下方的回覆還是不清楚@@

再請版主指教

謝謝
用功到世界末日那一天~~~

TOP

回復 1# PKKO

提供一個不使用字典物件的寫法

Arr 處理過後 得到一個 不重複的 Brr 陣列
  1. Sub test()
  2. Arr = Array("XX", "aa", "ab", "ab", "ab", "XX", "ab")
  3. T$ = ""
  4. For Each Item In Arr
  5.   If InStr(T$, Item) = 0 Then T = Trim(T & " " & Item)
  6. Next
  7. Brr = Split(T, " ")
  8. End Sub
複製代碼
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 6# li_hsien

原先
For Each E In AR
    D(E) = ""
Next
AR = D.KEYS


改為,將 E 改為 Key,是否比較有感覺
For Each Key In AR
    D(Key) = ""
Next
AR = D.KEYS


因為字典陣列 D(Key)裡的Key不會有重複值,
當 Key 從 AR 陣列取出有重複值時,會以前一個相同Key值的 D(Key) 為位置。


D(Key) = "",後面賦值是甚麼不重要,因為後面用 D.KEYS 取出不重複值。


~ 個人解讀,供你參考 ~
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 准提部林 於 2020-5-18 11:46 編輯

回復 6# li_hsien

D(Key) = Item
可將Key比喻為不同的人, 而每一個人背個包包, 這包包可裝任何東西(Item),
Key值是唯一的(每個人在世上都是唯一的), 而Item可賦于其相關聯的內容, 或為空(包包不裝東西),
因為目的只是要取得不重覆值(即Key值), 所以用空字符""為Item,
__亦即每一個人都揹個空包包, 認人不認包
D(Key)=""
D(Key)=1
D(Key)="A"
都可以得到相同效果, 1及A是隨意給的,但在這裡毫無意義~~


================================

TOP

回復 7# n7822123


If InStr(" " & T$ & " "," " & Item & " ") = 0 Then T = Trim(T & " " & Item)
用分隔符號將字串包覆再比對, 避免錯判,
例如:"AA", "AAA", "張三", "張三郎" 會有所混淆~~

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題