DOBON.NET DOBON.NETプログラミング掲示板過去ログ

IndexOfについて

環境/言語:[Vb 2005 .net Framework 2.0 Windous CE 5.0]
分類:[.NET]

お世話になります。

現在Vb 2005 Pro にてプロジェクト種類をWindous CE 5.0で
デバイスアプリケーションの作成を行っています。

http://dobon.net/vb/dotnet/programing/icomparer.html
上記で配列内の要素の並び替えを指定できる方法がありました。

これを参考に配列内の一部分でのソートを行いました。
※配列内は "000001名前です1001" のように複数の項目からなる文字列になっています。

Public Class JisakuComparer
'IComparerインターフェイスを実装する
Implements System.Collections.IComparer

'xがyより小さいときはマイナスの数、大きいときはプラスの数、
'同じときは0を返す
Public Function Compare(ByVal x As Object, _
ByVal y As Object) As Integer Implements IComparer.Compare
Dim strByte() As Byte
Dim strByte2() As Byte
strByte = System.Text.Encoding.GetEncoding("shift-jis").GetBytes(CType(x, String))
strByte2 = System.Text.Encoding.GetEncoding("shift-jis").GetBytes(CType(y, String))

Return System.Text.Encoding.Default.GetString(strByte, 48, 6) - System.Text.Encoding.Default.GetString(strByte2, 48, 6)

End Function

End Class

上記で正しくソートはできたのですが、
実際にやりたい事は、配列内の要素の一部分の検索を行いたいです。
Data[0] = "000001名前1T1"
Data[1] = "000002名前2T1"
Data[2] = "000003名前3T2"
Data[3] = "000004名前4T2"
配列の内容が上記の場合に、先頭から6桁が"000003"である
配列の要素を取得したいです。

もし配列の内容が検索した文字のみだった場合、Array.IndexOf(Data, "000003")で取得はできますが
一部分でのソートが出来たので、同じように一部分での検索が
できないかと思いまして・・・・

どのようにしたら可能でしょうか?
※不可能であるならその事も教えていただきたいとおもいます。

よろしくお願いいたします。
  • 題名: Re[1]: IndexOfについて
  • 著者: mo
  • 日時: 2008/04/04 12:19:59
  • ID: 21792
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No21791に返信(ケイさんの記事)
> どのようにしたら可能でしょうか?
> ※不可能であるならその事も教えていただきたいとおもいます。
ソートする前に先頭の6文字でグルーピングと好いのではないかと.
  • 題名: Re[2]: IndexOfについて
  • 著者: ケイ
  • 日時: 2008/04/04 12:58:57
  • ID: 21793
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
返信ありがとうございます。

■No21792に返信(moさんの記事)
> ソートする前に先頭の6文字でグルーピングと好いのではないかと.
申し訳ないのですが、グルーピングとはどういう事でしょうか?

配列の関数か何かですか?
> 一部分でのソートが出来たので、同じように一部分での検索が
> できないかと思いまして・・・・

まずはどんなことができるか
http://msdn2.microsoft.com/ja-jp/library/system.array_methods(VS.80).aspx
で、使えそうなのがこれ
http://msdn2.microsoft.com/ja-jp/library/d9hy2xwa(VS.80).aspx

まぁ、結局自分でループ検索するのと同等ですが。
おっしゃるとおりIComparerと考え方は同じですね。
理解できていれば違和感無くできると思います。
  • 題名: Re[2]: IndexOfについて
  • 著者: Hongliang
  • 日時: 2008/04/04 13:34:09
  • ID: 21795
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> バージョン情報
> .NET Framework
> サポート対象 : 2.0

しょっぱいですね。List<T>なら一通りサポートされてるのに。
// それとも記載漏れ?
2008/04/04(Fri) 14:18:08 編集(投稿者)

返信ありがとうございます。

■No21794に返信(まどかさんの記事)
> まずはどんなことができるか
> http://msdn2.microsoft.com/ja-jp/library/system.array_methods(VS.80).aspx
> で、使えそうなのがこれ
> http://msdn2.microsoft.com/ja-jp/library/d9hy2xwa(VS.80).aspx
>
> まぁ、結局自分でループ検索するのと同等ですが。
> おっしゃるとおりIComparerと考え方は同じですね。
> 理解できていれば違和感無くできると思います。

残念ながらFindは使えないようでした。
※Array.を入力後に全ての候補が参照できるのですが、その中にFindが含まれて
いないのですよね・・・・

ただ、上記箇所を参考に行ってみようと思います。

※現在配列の要素が5000程の場合の検索で短時間での計測を調べていました。
結局自分でループ検索するのと同等という事ですと時間がかかってしまう為、
別の方法も考えてみます。

ありがとうございました。
解決済み!
  • 題名: Re[3]: IndexOfについて
  • 著者: まどか
  • 日時: 2008/04/04 15:33:47
  • ID: 21797
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
失礼しました。
CompactFrameworkのアイコンがありませんでした。。。
残念無念。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板