在下面的代码中,我在行If (Not hash.Add(Numbers(Num))) Then
上收到以下错误} Type'Engger'的值无法转换为'System.Array'。我做错了什么?
Module Module1
Sub Main()
Dim array() As Integer = {5, 10, 12, 8, 8, 14}
' Pass array as argument.
Console.WriteLine(findDup(array))
End Sub
Function findDup(ByVal Numbers() As Integer) As Integer
Dim hash As HashSet(Of Array)
For Each Num In Numbers
If (Not hash.Add(Numbers(Num))) Then
Return (Num)
End If
Next
End Function
End Module
答案 0 :(得分:2)
在findDup
内,这个
Dim hash As HashSet(Of Array)
应该是
Dim hash As HashSet(Of Integer)
编辑:根据@Damien_The_Unbeliever的建议,代码
这一行
If (Not hash.Add(Numbers(Num))) Then
应该是
If (Not hash.Add(Num)) Then
答案 1 :(得分:1)
您已经创建了一个Array的哈希集,而不是一个Integer的哈希集。您可以将其更改为Integer,并更改您尝试在循环中添加内容的方式:
Function findDup(ByVal Numbers() As Integer) As Integer
Dim hash As New HashSet(Of Integer)
For Each Num In Numbers
If (Not hash.Add(Num)) Then
Return (Num)
End If
Next
End Function
我希望您意识到它只会找到第一个副本,并且如果找不到副本,则不会返回任何类型的值。
答案 2 :(得分:0)
您已将hash
声明为HashSet(Of Array)
,这意味着它包含数组。但是你正在尝试为它添加整数。
您需要更改其声明(HashSet(Of Integer)
)或将呼叫更改为Add
(Add(Numbers)
)。
您使用哪种解决方案取决于您的意图。我的猜测是你要改变hash
的类型。
答案 3 :(得分:0)
这是你的意思吗?
Sub Main()
Dim someArray() As Integer = {5, 10, 12, 8, 7, 8, 8, 10, 14, 10}
' Pass array as argument.
Dim foo As List(Of Integer) = findDups(someArray)
'foo contains a list of items that have more than 1 occurence in the array
End Sub
Function findDups(ByVal Numbers() As Integer) As List(Of Integer)
Dim rv As New List(Of Integer)
For idx As Integer = 0 To Numbers.Length - 1
If Array.LastIndexOf(Numbers, Numbers(idx)) <> idx Then
If Not rv.Contains(Numbers(idx)) Then rv.Add(Numbers(idx))
End If
Next
Return rv
End Function