作者retsamsu (haha)
看板C_Sharp
标题Re: [问题] 请问关於 Dictionray...
时间Mon Jul 30 22:26:53 2007
※ 引述《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
1F:推 KENyroj:感谢指教... ^^ 07/31 09:14