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

ツリー一括表示

Nomalアイコン 配列を持つ自作クラスで、入れ替える関数を作成したい。 /ken (18/02/07(Wed) 11:25) #33803
Nomalアイコン Re[1]: 配列を持つ自作クラスで、入れ替える関数を作成したい。 /Hongliang (18/02/07(Wed) 11:50) #33804
  └Nomalアイコン Re[2]: 配列を持つ自作クラスで、入れ替える関数を作成したい。 /ken (18/02/07(Wed) 12:09) #33805
    └Nomalアイコン Re[3]: 配列を持つ自作クラスで、入れ替える関数を作成したい。 /kiku (18/02/07(Wed) 13:11) #33806


親記事 / ▼[ 33804 ]
■33803 / 親階層)  配列を持つ自作クラスで、入れ替える関数を作成したい。
□投稿者/ ken 一般人(1回)-(2018/02/07(Wed) 11:25:30)
  • アイコン環境/言語:[VB.net(現状2010を使用中)] 
    分類:[.NET] 

    2018/02/07(Wed) 11:27:43 編集(投稿者)

    以下のようなデータ列を格納するクラスを作成しました。

    <Serializable()>
    Public Class db_data
    Public shoshi(10000, 14) As String
    Public name(10000) As String

    db_dataというクラスを用いると、最大10000個のデータ列を持つことができ、各1つのデータは、書誌という14個の文字列、名前という一つの文字列を持っています。

    最終的に行いたいことは、ソートで、例えばshoshiの4つ目の文字列を各々比較して、昇順に並び替えるとか、あるいはタイトル順に並び替えるなどです。いずれのデータ要素(shoshiの14個とタイトル1個)もソート対象にする可能性があります。
    例えばshoshiの1番目に生年月日、2番目に就職日が入っているとして、生年月日順、就職日順のいずれでもデータ列を並び替えられるようにしたいです。

    とりあえず簡単なバブルソートで並び替えることを考えていますが、このためには
    クラスdb_data(a)とdb_data(b)の内容をそっくり入れ替えるような関数(orサブルーチン)Swapをdb_dataクラスの中に定義しておきたいと思います。
    この際のクラスの定義の仕方などをご教授ください。
違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 33803 ] / ▼[ 33805 ]
■33804 / 1階層)  Re[1]: 配列を持つ自作クラスで、入れ替える関数を作成したい。
□投稿者/ Hongliang 大御所(539回)-(2018/02/07(Wed) 11:50:23)
  • アイコンソートのことを考える前にまず提案なのですが、

    > db_dataというクラスを用いると、最大10000個のデータ列を持つことができ、各1つのデータは、書誌という14個の文字列、名前という一つの文字列を持っています。

    であれば、まずこの「1つのデータ」をクラス化できませんか?
    つまり
    Class Book
    Dim Shosi As String(13) ' 添え字0-13までで14個
    Dim Name As String
    End Class
    みたいな。
    そうすれば、Bookの配列(List(Of Book)などの方がいいかも)を持つだけで済み、
    2つの配列を同時に並び替えるだとか考えずに済み、
    標準ライブラリに定義されているソートメソッドを使用できるようになりますが。
違反を報告
[ 親 33803 / □ Tree ] 返信 削除キー/

▲[ 33804 ] / ▼[ 33806 ]
■33805 / 2階層)  Re[2]: 配列を持つ自作クラスで、入れ替える関数を作成したい。
□投稿者/ ken 一般人(2回)-(2018/02/07(Wed) 12:09:38)
http://VB.net(現状2010を使用中)
  • アイコンコメントありがとうございます。

    ご指摘の点はごもっともなのですが、プログラムを0から書いているのでなく、前述のようなプログラムですでにいろいろな機能が実装され、クラスのセーブ/ロードなど含めて今からすべてを書き直すのは大変な状況にございます。

    現状はdb_data.vbに

    <Serializable()>
    Public Class db_data
    Public shoshi(10000, 14) As String
    Public name(10000) As String
    End Class

    と書き、メインフォームのコードForm_main.vbで

    Public Class Form_main
    Public db_dat(10) As db_data
    <略>
    For i = 0 To db_dat.Length - 1
    db_dat(i) = New pat_data

    としています。
    下手くそなプログラムで申し訳ありませんが、よろしくお願いいたします。
違反を報告
[ 親 33803 / □ Tree ] 返信 削除キー/

▲[ 33805 ] / 返信無し
■33806 / 3階層)  Re[3]: 配列を持つ自作クラスで、入れ替える関数を作成したい。
□投稿者/ kiku 一般人(3回)-(2018/02/07(Wed) 13:11:04)
  • アイコンdb_dataからHongliangさんご提案のList(Of Book)に積み替えるメソッドを
    作成し、積み替え実行する。
    その上でList(Of Book)の形でLINQなどを使用して必要なソートを実行。
    List(Of Book)からdb_dataへ積み替えるメソッドを作成し実行。
    10000万件程度であればそんなに遅くならないと
    思いますし、それよりもソートが柔軟に行えるメリットの方が大きいと
    思いました。

違反を報告
[ 親 33803 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -