Re: [問題] 請問關於 Dictionray...

看板C_Sharp (C#)作者 (haha)時間18年前 (2007/07/30 22:26), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《KENyroj (難得一身雞蛋糕...)》之銘言: : 請問各位大大... : C# 的 Dictionary<> 容器... 提供了 Key-Value 的 pair... : 但是他似乎不允許 Key 值的重複... 但今天我的需求 Key 值一定會有重複... : 甚至 Value 值也是會有重複... 請問還有什麼容器可以使用嗎... ?? : 我需要一個類似 C++ 的 multimap 的容器... : 謝謝各位的解答~ : __yroj 有一些方法 1. dictionary存object,gethashcode就不會一樣,就可以存key一樣的東西了 如(vb寫法) Public Class multimap Private value As String Public Sub New(ByVal _value As String) value = _value End Sub End Class ... Dim mmap As New Hashtable() Dim key1 As New multimap("A") Dim Key2 As New multimap("A") mmap(key1) = "1" mmap(key2) = "2" ... 這樣就可以重複key了(因為Object ID不一樣,所以就是不一樣的HashCode) 2. Implement IEqualityComparer 這邊是說在new hashtable時把比較什麼是一樣的interface implement出來 在GetGashCode()的時候想辦法讓key一樣的值回傳一個不一樣的值,讓Equals() 比的時候不太一樣(可以用timestamp或流水號之類的東西來加入比較) 如(vb寫法) Public Class multimapcomp Implements IEqualityComparer Public Function GetHashCode(ByVal obj As Object) As Integer _ Implements IEqualityComparer ' 這邊就要想辦法讓一樣key的不一樣 Return (obj.ToString()+Now.ToString()).GetHashCode() ' 甚至 Return (Now.ToString()).GetHashCode() 我想也差不多, ' 反正不一樣就好 End Function 'Equals用預設的就好 End Class ... Dim mmap As New Hashtable(New multimapcomp()) mmap("A")="1" mmap("A")="2" ... 這樣就可以重複key了(兩個A的GetHashCode不一樣) 試試看,有錯請指教~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.209.4

07/31 09:14, , 1F
感謝指教... ^^
07/31 09:14, 1F
文章代碼(AID): #16hVKkf4 (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #16hVKkf4 (C_Sharp)