tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル構造体の配列の検索
記事No10339
投稿日: 2010/12/07(Tue) 12:24
投稿者よっくん
こんにちは。

VB2005 & WinXP SP2

VB2005で構造体の配列の検索を行いたいのですが
うまくいきません。

ふつうの配列の場合は

        Dim test(3) As String

        test(0) = "1"
        test(1) = "2"
        test(2) = "3"
        test(3) = "4"

        MessageBox.Show(Array.IndexOf(test, "3"))

で検索できるのは分かったのですが、


Public Structure Kozotai
    Dim ID As Integer
    Dim NAME As String
End Structure

        Dim test(3) As Kozotai

        test(0).ID = 1
        test(0).NAME = "のびた"

        test(1).ID = 2
        test(1).NAME = "ドラえもん"

        test(2).ID = 3
        test(2).NAME = "ジャイアン"

        test(3).ID = 3
        test(3).NAME = "すねお"

        MessageBox.Show(???????????)

上記のような構造体の配列の場合に、
"ジャイアン"で検索するには
どのように記述すればいいのか判りません。

何か、サクっと検索できる記述はあるのでしょうか?

現在はFOR NEXTで全件検索をかけているのですが
何かスマートな方法は無いものか?と思い
質問させて頂きます。

宜しくお願い致します。

[ツリー表示へ]
タイトルRe: 構造体の配列の検索
記事No10340
投稿日: 2010/12/07(Tue) 14:32
投稿者shu
    Public Structure Kozotai
        Public ID As Integer
        Public NAME As String

        Public Overrides Function Equals(ByVal obj As Object) As Boolean
            If TypeOf obj Is String Then
                Dim strName = DirectCast(obj, String)
                Return (NAME = strName)
            ElseIf TypeOf obj Is Kozotai Then
                Dim objDes As Kozotai = DirectCast(obj, Kozotai)

                Return (NAME = objDes.NAME)
            Else
                Return False
            End If
        End Function
    End Structure

こんな感じに構造体を定義すると

Array.IndexOf(test, "ジャイアン")の戻り値が2になります。

[ツリー表示へ]
タイトルRe: 構造体の配列の検索
記事No10341
投稿日: 2010/12/07(Tue) 14:34
投稿者YuO
> 何か、サクっと検索できる記述はあるのでしょうか?

.NET 3.5以降ならLINQで綺麗に書けますが……。


> 現在はFOR NEXTで全件検索をかけているのですが

内部的にはFor - Nextに等しくなりますが,Array.Findを使うと,少し見た目はすっきりするかもしれません。
MSDN: Array.Find ジェネリック メソッド (System)
http://msdn.microsoft.com/ja-jp/library/d9hy2xwa(VS.80).aspx

あとは,構造体ではなくDataTableを使うとかでしょうか。

[ツリー表示へ]
タイトルRe^2: 構造体の配列の検索
記事No10342
投稿日: 2010/12/07(Tue) 15:28
投稿者よっくん
shu様 YuO様
アドバイス ありがとうございます。


shu様
構造体の定義の中にもFunctionが書けるとは知らず勉強になりました。
ブレークポイントを貼って処理を追っていたら
ジャイアンでリターンしてる!っていうのが判りました。


YuO様
>NET 3.5以降ならLINQで綺麗に書けますが……。
VB2008 LINQで検索してみたら、なんかすんごい楽そうな手法ですね…。
プチDBって感じでしょうか。ちょっちVisual Studio 2008が欲しくなりました。

Array.Find ジェネリック メソッドについては
ちらっと読んだだけでは全く判らなかったので
勉強しつつ調べてみます。


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

[ツリー表示へ]