VBでの構造体のソート方法についての質問

このQ&Aのポイント
  • VB(2010)で行う構造体のソート方法について、初心者が理解するための方法を教えてください。
  • 約500万件のテキストファイルを対象に、構造体のclass1、class2、class3の順でソートしたいです。
  • 複数の条件でソートする方法と仕組みがわからないため、.NETのサンプルコードを参考にしても理解できません。教えていただけると助かります。
回答を見る
  • ベストアンサー

構造体のソートの方法について(VB)

VB(2010)で行う構造体のソートの方法についてお尋ねします。 下記のようなデータのソートを行いたいです。 レコード数:約500万(テキストファイル) 構造体: data(i).class1 data(i).class2 data(i).class3 data(i).class4 data(i).class1-.class2-.class3の順でソートを行いたいです。 いくつかのサイトで調べ、.NETのサンプルコートは見つけたのですが、当方初心者のため複数の条件でソートする方法と仕組みを理解することができませんでした。 どなたか教えていただけるとありがたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.1

> data(i).class1-.class2-.class3の順でソートを行いたい の意味が不明確ですが、class1のほうが重要視される、という意味だとすると 簡単には、Class1が上位の桁、Class2が中位の桁、Class3が下位の桁、を表していると考えることです。 なので、大小比較の部分を if data(i).class1>data(j).class1 then → data(i)はdata(j)より大きい else if data(i).class1<data(j).class1 then → data(i)はdata(j)より小さい else if data(i).class1=data(j).class1 then (実際はif以降は必要ない)  → data(i)とdata(j)のclass1は同じ大きさなので、    class2をこれまでと同様にして大小比較する      もし、class2も同じなら、class3を比較する end if と置き換えればよいです。

ugugokana
質問者

お礼

下記サイトも参考にして作成することができました。ありがとうございました。 http://www.geocities.co.jp/SilkRoad/4511/vb/sort.htm ただ、500万レコードは大変な処理時間を要します・・。

ugugokana
質問者

補足

早速の回答をありがとうございます。 > data(i).class1-.class2-.class3の順でソートを行いたい これは、data(i).class1-.class2-.class3の優先順でソートを行いたいということです。 言葉足らずでした。

関連するQ&A

  • C言語の構造体にてバブルソートが上手くいきません‥

    C言語の構造体にてバブルソートが上手くいきません‥ 初めて質問致します。 以下は、構造体で、身長順にバブルソートを行うソース文ですが、 結果表示が、最下部に示したように、 5つのレコードのうち1つが消えてしまい、 残った4つのレコードのうちの1つが重複されて表示されてしまいます。 これが、なかなか解決できません‥。 既に結構調べており、また、早く解決できないといけないこともあり、 すみませんが、回答の形式でお願いできますと大変幸いです。 何卒よろしくお願い致します。 #include<stdio.h> #include<string.h> typedef struct kojin { char name[21]; int length; int weight; }KOJIN; int main(void) { int i, c, j; char buf[4]; KOJIN data[10]; KOJIN *d; printf(

  • 構造体のソートに関して

    VB初心者です。 Private Save() As InIDtyp Private Type InIDtyp ID As String Name As String Unit As String End Type という宣言をしま構造体で値が入っているときにIDをキーとしてソートすることは可能でしょうか。 1回やってみたのですが、IDのみソートされてしまい、NameとUnitは一緒にソートされずにそのまま残ってしまいました。 デバッグをかけて中を見ましたらこんな感じでした。 例: 元の構造体 Save(0) ------ID:  56 ------Name: AA ------Unit: ms Save(1) ------ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  33 ------Name: LI ------Unit: ba ソート後 Save(0) -----ID:  33 ------Name: AA ------Unit: ms Save(1) -----ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  56 ------Name: LI ------Unit: ba どなたか構造体のソートのやり方をご存知の方がいましたらご教授お願いします。

  • 構造体配列の安定なソート

    出席番号と得点の配列を持つ構造体配列で、 出席番号順に並んだ状態でqsortを使って得点をソートする場合、 同じ得点の人でも、出席番号順はばらばらになってしまいますよね。 調べてみて、バブルソートなど安定なソートを使えばいいということが分かったのですが、 qsortは標準ライブラリにあって、 比較関数も見よう見まねで作ってなんとかなったのですが、 他の方法となると具体的にどうすればいいのか、 よくわからない状況です。 http://homepage1.nifty.com/daccho/program/algo/sort3.htm こちらのサイトのソースファイルを見て、 普通のint配列のバブルソートは出来たのですが、 構造体配列を、構造体の中の一つの要素をキーにバブルソートできるようにするには、 ここからどのように変更すればいいのでしょうか? 並び替える内容はint型だけなので、文字列をソートできるようにする必要はなく、 ソート対象も少ないので(上限100程度)、速度的な問題は考慮しなくて大丈夫だと思います。 Cは勉強中で、基本文法がわかるぐらいという状況で、 もしかしたら変なことを言っているのかもしれませんが、 よろしくお願いします。

  • 構造体のリストをソートしたい。

    ある名簿のリストを作りました。 以下のような構造体で、 typedef struct meibo{ char name[10]; int old; struct meibo *next; }MEIBO; これを、ポインタp->next->nameをたどっていって、名前が辞書順になるようにリストを作ったのですが、 これを年齢順にソートして表示させたいんです。 どんな方法があるんでしょうか? 一旦すべてを配列に格納して、クイックソート…とかも考えたのですが、すごく領域をとるし、なんか2度手間(最初から配列に順に格納していけばよかったなぁ・・・と。 それでもやっぱり最初から名列順にするときから配列に入れておくほうがいいのでしょうか? 教えてください。 (最初から年齢を比較してリストを作れば・・ってのはなしで、名列順のリストが存在するものとしてください。)

  • Javaには、構造体はないんですか?

     C言語の構造体みたいなのはないんですか? 野球のデータを扱っているのですが、構造体がないのでできません。 打率の順位をソートしたいのですが、Cでは構造体でソートすれば選手名まで全部ソートできたのですが。。。 Javaでは、いちいち選手名、打率などの配列を作っているのですが、打率をソートしてから選手名と一緒に表示しようとしても打率の配列だけ、ソートしてあり選手名の配列と打率の配列があいません。 要するに、打率の配列はソートし、選手の配列はデータを入力したときのままなので、順番が違っているのです。 うまい方法を教えてください。初歩的な質問でごめんなさい。

    • ベストアンサー
    • Java
  • 構造体配列の並べ替え

    いつもお世話になっております。 VB6で構造体の配列をソートしたいと考えています。 具体的やりかたは調べたいと思うのですが、ヒントとしてひとつ教えてほしいことがありまして質問させていただきました。 たとえば 名前(string) 身長(integer) 体重(single) 何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。 すると体重だけがソートされてしまうのでしょうか? それとも構造体ごとソートされてくれるのでしょうか? 前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。 よろしくお願いします。

  • VB6でやると構造体の配列になる変数をVB2008では何で作ればいいか

    VB6でプログラムを作っていたときは 値のセットが配列になるとき 構造体を動的配列で宣言してデータを足して作りました。 VB2008で開発をすることになり 同じようなことをしたいのですが もっと便利なやり方が登場したりするのでしょうか? クラスで挑戦したのですが動的配列はできないようでした。

  • 構造体配列のソート

    VB6 ソートのやり方は知っていますが、構造体の定義が変わると対応できません。 ソート処理部分だけを共通関数にできますでしょうか? Private Type Sort strCol1 As String intCol2 As Integer sttCol3 As String End Type Private Sub A() Dim typSort(3) As Sort 'ここに、構造体データ設定処理を記述 Call subSort(typSort(), typSortCopy) End Sub Private Sub subSort(typTaget() As Sort) Dim lngOutLoop As Long Dim lngCurent As Long Dim lngInLoop As Long Dim Min As Variant Dim typSortCopy As Sort For lngOutLoop = LBound(typTaget) To UBound(typTaget) - 1 Min = typTaget(lngOutLoop).strCol1 lngCurent = lngOutLoop For lngInLoop = lngOutLoop + LBound(typTaget) + 1 To UBound(typTaget) If typTaget(lngInLoop).strCol1 < Min Then Min = typTaget(lngInLoop).strCol1 lngCurent = lngInLoop End If Next lngInLoop typTagetCopy = typTaget(lngOutLoop) typTaget(lngOutLoop) = typTaget(lngCurent) typTaget(lngCurent) = typTagetCopy Next lngOutLoop End Sub

  • テキストデータと構造体。

    テキストデータを構造体に代入し、キャッシュの仕組みの様に見せるプログラムをC言語で作れますか? 教えて下さい。ちょっと緊急です…

  • VBのソート処理のやりかた

    同じような質問を以前こちらでさせていただいたのですが、質問ないようが粗かったため、再度させていただきます。 前回の→http://soudan1.biglobe.ne.jp/qa4920320.html どなたかお力を貸していただければと思います。 【処理概要】 個人成績表からレコードを取得し、取得したレコードを点数の高い順にソートし、順位・氏名・点数を個人成績順位表に出力する といったものです。 個人成績表は、氏名と点数の2項目で、レコード数は自由です。 とりあえず、私はサクラエディタに10レコード作りました。(下記参照) また、個人成績順位表もサクラエディタで作っています。 それをコーディングディングの最初に Open "C:\INFILE.txt" For Input As #1 Open "C:\OUTFILE.txt" For Output As #2 で開き、はじめるというのが、それまでの課題で指示されています。 今考えているのが ・loopのなかにloopを使いバブルソートする ・i = i + 1の式を使いたい といった程度です。 個人成績表なのですが、他の人の表も実行できるように「レコード数は不明」の前提で、コーディんグするようにとのことです。 また個人成績順位表は、「順位・氏名・点数」の順に出力とあり、 ソートの考え方として、【レコードを配列に取り込む→レコードを取り込む際に件数をカウントし、件数をn件とする】 とありました。 VBは全くの素人で、ネットで調べても、レベルが高すぎて応用できないためこちらで質問させていただきました。 どなたか力を貸していただけないでしょうか?よろしくお願いいたします。 【自作個人成績表】 青木        076 井上        081 江藤        066 柏原        092 小林        087 斉藤        059 佐久間       076 関根        088 塚田        096 富田        083 :          :

専門家に質問してみよう