2016-05-09 11 views
0

の組み合わせを格納するハッシュテーブルを使用することができますカスタムクラスを定義して配列から始めましたが、その配列内の項目を削除するのは辛いことがわかりました。私はハッシュテーブルがiは、文字列と整数

Dim File1Reader As New System.IO.StreamReader(TextBox1.Text) 
Dim lineCount1 = File.ReadAllLines(TextBox1.Text).Length 

Dim File1line As String 
Dim file1items(lineCount1) As String 
Do While File1Reader.Peek() <> -1 
    File1line = File1Reader.ReadLine 
    If File1line.Length > 0 Then 
     file1items(i) = File1line 
    End If 

    i = i + 1 
Loop 

System.Array.Sort(Of String)(file1items) 

Dim file1table As New Hashtable() 
Dim file1count As New Dictionary(Of String, Integer)() 

For x = 0 To (lineCount1 - 2) 

    If file1items(x) = file1items(x + 1) Then 
     c = c + 1 
    Else 
     c = 1 
    End If 

    file1count.Add(file1items(x), c) 
Next 

    MsgBox(file1count(0)) 

削除/アイテムを追加することは非常に柔軟であることを読んで、私は次のエラーを取得:

タイプの未処理の例外「System.ArgumentNullException」のがmscorlib.dllで

を発生しました

追加情報:値はnullにはできません。

この例外のハンドラがある場合は、プログラムを安全に続行することができます。

+1

あなたはプログラムのどこにでもHashTableを使用していません。独自の文字とその数を格納するには、 'Dictionary 'だけで十分です。 – dotNET

答えて

0

これは間違いなく難しいことです。

Dim results As List(Of IGrouping(Of String, String)) = 
     File.ReadLines(TextBox1.Text). 
       GroupBy(Function(s) s.Trim()). 
       OrderBy(Function(g) g.Key). 
       ToList() 

MsgBox(String.Format("{0,-5}{1}",results(0).Key, results(0).Count())) 

どのようにソートされているのかという質問からは分かりません。カウントよりもキーのほうが気になる場合は、代わりに以下のコードを使用します。 Select() linq演算子を追加することに注意してください。この場合、グループの再計数を続ける必要がなくなり、パフォーマンスが向上します。また、匿名型のため、results変数の型推論に戻らなければなりませんでした。

Dim results = File.ReadLines(TextBox1.Text). 
       GroupBy(Function(s) s.Trim()). 
       Select(Function(g) New With {.Key = g.Key, .Count = g.Count()}). 
       OrderBy(Function(g) g.Count * -1). 
       ThenBy(Function(g) g.Key). 
       ToList() 

MsgBox(String.Format("{0,-5}{1}",results(0).Key, results(0).Count)) 
+0

VB.Net ...あなたの父親のVB6ではありません。 –

関連する問題