ListView内の項目を検索するには?

解決


のんち  2005-05-07 10:08:51  No: 121498

下記のようなListViewの表で、例えば項目1のtest2の場所を
探してIndexを取得したいのですが、方法はありませんか?

  項目0  項目1  項目2
  AAAA    test1    DDDD
  BBBB    test2    EEEE
  CCCC    test3    FFFF

色々探してみたのですが、分かりませんでした。
よろしくお願いします。


たちイエロー  2005-05-07 15:44:43  No: 121499

単純だがこんな方法はいかが?

Private Sub Command1_Click()
    MsgBox サブアイテムを検索("text2")
End Sub

Function サブアイテムを検索(data As String) As Integer
    Dim i As Integer
    For i = 1 To ListView1.ListItems.Count
        If ListView1.ListItems.Item(i).SubItems(1) = data Then
            サブアイテムを検索 = i
            Exit Function
        End If
    Next
    サブアイテムを検索 = 0
End Function


のんち  2005-05-07 22:54:58  No: 121500

たちイチローさん、ありがとうございます。
その方法も考えたのです。説明不足ですみませんでした。

lisiview内のデータ数が10000件くらいあり、
5000件くらいのデータを既登録なデータではないか
検索しつつlistviewに登録しようとしています。
(既登録であれば登録しません)
常に全データを見てると時間が掛かりすぎてしまうと思い
他に方法が無いか検討していました。

現在はハッシュ法を使って、独自にテーブルを作って
ハッシュっぽいことをして既登録かどうかをチェックしています。
このテーブルを作成するのに500件くらいのデータで
10秒くらいかかってしまいます。
なので、このテーブルを作らずにlistviewで高速な検索方法が
ないかと思いまして質問致しました。


たちイエロー  2005-05-08 10:05:13  No: 121501

私も数万件ほどのデータに対し似たような処理を作ったことがありますが、
そんなに重い処理にはなりませんでした。
5万件でも1秒に満たなかったです。

※もちろん、マシンスペックにもよるでしょうが・・・


Say  2005-05-08 16:34:51  No: 121502

>現在はハッシュ法を使って、独自にテーブルを作って
>ハッシュっぽいことをして既登録かどうかをチェックしています。
>このテーブルを作成するのに500件くらいのデータで
>10秒くらいかかってしまいます。

自作ハッシュでなくScripting.Dictionary使うとか・・・


のんち  2005-05-08 18:25:03  No: 121503

たちイエローさん  Sayさんありがとうございます。
(たちイエローさん名前間違えてすみません)

自作ハッシュが悪さしているのかもしれないですね・・
普通にたちイエローさんが書いて下さった方法でも
試してみます。

ScriptingDictionaryというのはまだ使ったことがないので、
これから調べてみます。

もう少しやってみてから結果報告したいと思います。
ありがとうございました。


のんち  2005-05-08 23:08:54  No: 121504

自作ハッシュ無しで普通にListViewを作成しても処理時間が
かかり変だなと思ったらループの中にいれていたSleepが
悪さをしていました。
読み込みとListView作成に時間がかかるものと思いこみ
Sleppを入れていたのが、遅い原因でありました。
助言を頂いた皆様、お手数をおかけして申し訳ありませんでした。
これにて、解決とさせて頂きます。
続けてScriptDictionaryも試してみます。

ありがとうございました。


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

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






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