Re: [問題] 請問關於 Dictionray...
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章