連想配列

解決


白虎  2005-06-10 04:11:24  No: 90343

VB.Netです。
連想配列を使って(StringDictionary)
収められている値Valueをキーワードで検索して
存在すれば、そのハッシュKeyを取り出すって事がしたいのですが

Dim de As System.Collections.DictionaryEntry

CType(de.Value, String).IndexOf("キーワード", 0)

でも

System.Text.RegularExpressions.Regex.IsMatch(CType(de.Value, String), "キーワード")

の正規表現でも
日本語文字とアルファベット(a,iなど)が一致します。
これは仕様なのでしょうか?
よろしくお願いします。


クラゲ  URL  2005-06-10 09:19:12  No: 90344

完全一致なら、単純に

        Dim ht As Hashtable = New Hashtable

        ht("japan") = "日本"
        ht("america") = "アメリカ"
        ht("america2") = "アメリカfg"
        ht("america3") = "アメリカss"
        ht("america4") = "アメリカgg"

        For Each de As DictionaryEntry In ht
            'If CType(de.Value, String).IndexOf("アメリカ", 0) = 0 Then
            If de.Value = "アメリカ" Then
                MsgBox(de.Key)
            End If
        Next

で、よろしいかと思います。


白虎  2005-06-10 19:12:16  No: 90345

ありがとうございます。
完全一致ではなく、Value値の文字列の中に
一致するキーワードがあるかどうか調べたいのです。

作りたいのは日記で、データーベースの代わりにCSVでテキストに書き出し
それをハッシュ(StringDictionary)に読み込んで利用しています。
「キー」に日時、「値」に本文
本文のキーワード検索が目的です。

よろしくお願いします。


クラゲ  URL  2005-06-10 20:07:10  No: 90346

上記コードの
If de.Value = "アメリカ" Then  を
If CType(de.Value, String).IndexOf("アメリカ", 0) = 0 Then
に変更してみてください。
そのまま、ひっかかると思います。
でも、このやり方ではないのですよね。


白虎  2005-06-10 22:23:49  No: 90347

ありがとうございます。

If CType(de.Value, String).IndexOf("keyWord", 0) >= 1 Then

で上手く動作しました。
ヘルプを見直して
value が Empty の場合、戻り値は startIndex...
本文が空の場合(上の場合)「0」が返ってくるのですね。
解決したました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加