2011-11-11 35 views
1

次のコードでは、次のエラーが発生していますIf (Not hash.Add(Numbers(Num))) Then 'Integer'型の値を 'System.Array' 。私は間違って何をしていますか?VB.NET: 'Integer'型の値を 'System.Array'に変換できません

findDupインサイド
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 
+1

Num'が既に抽出された値である 'ので、(@shahkalpeshが応答した)現在のエラーに加えて、それは、あなたがAdd''への呼び出しで ''番号(NUM)を使用したいとは考えにくいのです'Numbers'配列から取得します。 –

答えて

2

、この

Dim hash As HashSet(Of Array) 

はする必要があります

Dim hash As HashSet(Of Integer) 

EDIT:@Damien_The_Unbeliever、コード

このラインによって示唆されるように

If (Not hash.Add(Numbers(Num))) Then 

If (Not hash.Add(Num)) Then 
+0

ループ中にハッシュセットに追加しようとしているため、インデックス外のエラーが発生する – Jay

+0

@D ..:上記のコメントを追加している間に編集が完了しました。 – shahkalpesh

0

であるべきあなたはそれが配列を保持していることを意味し、HashSet(Of Array)するhashを宣言しました。しかし、整数を追加しようとしています。

宣言(HashSet(Of Integer))を変更するか、AddAdd(Numbers))に変更する必要があります。

あなたが使用する解決方法は、あなたの意向によって異なります。私の推測では、hashのタイプを変更したいと考えています。

1

Integerのハッシュセットではなく、Arrayのハッシュセットを作成しました。あなたはそれを整数に変更し、あなたがあなたのループで物事を追加しようとする方法を変更できます。私はあなたはそれが唯一の初の重複を見つけることを実現し期待しています

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 

、との値を返しません。重複が見つからない場合はすべてのタイプ。

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 
関連する問題