いつもお世話になっております。
VB6で構造体の配列をソートしたいと考えています。
具体的やりかたは調べたいと思うのですが、ヒントとしてひとつ教えてほしいことがありまして質問させていただきました。
たとえば
名前(string)
身長(integer)
体重(single)
何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。
すると体重だけがソートされてしまうのでしょうか?
それとも構造体ごとソートされてくれるのでしょうか?
前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
#1です。
回答になっていませんでしたね。
> 何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。
はい、この場合体重だけソートされます。
なので#1のヒントになります。
> 前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。
がんばってください。
No.4
- 回答日時:
ソートでは、一部のメンバー(ソートキーの場合)で大小比較をして、データを序列を反映して、移す(ポインタで処理しないとき)ときは、全メンバーを移すのが鉄則です。
そのとき代入を
構造体名.メンバーA=構造体。メンバーX
構造体名.メンバーB=構造体。メンバーY
構造体名.メンバーC=構造体。メンバーZ
・・
のようにしなくてはならないのか、
構造体名=構造体名
ができるかを質問しているのでしょうが、
http://www.geocities.co.jp/SiliconValley-Bay/743 …
に見つけましたが、昔は
「構造体をまるごと(全メンバーのデータ)を、一度に同じ型の構造体に代入することはできない。」言語仕様の例があったようです。
しかし
>最近の多くのC言語ではその制約がなくなっていますが。・・
でC言語に限らず可能と思います。
心配なら、その使う言語で、数行のプログラムを書いてテストしてみると良いと思います。
昔、(構造体の起源らしい)PLIでも、これができて、これは良い・便利、と思った記憶があります。
http://www.lbm.go.jp/toda/comp/corigin.html
http://www.shoeisha.com/book/pc/20c/chap05/gen.htm
こんな記事もありました。
コードがすっきりしますね。
No.3
- 回答日時:
要はどのように作るかと言うことでしょうが
通常は
Type Profile
名前 As String
身長 As Integer
体重 As Single
End Type
といった、構造体を作成して、
Dim Profiles(100) As Profile
といったように、配列を宣言すると思います。
(注:実際には100の添字は適切な最大値を設定、または、動的配列にする)
で、ソートのためにデータ交換する場合は、例えば以下のような感じですかね。
If Profiles(0).体重 < Profiles(1).体重 then
Dim Tmp As Profile
Tmp = Profiles(0) ※
Profiles(0) = Profiles(1) ※
Profiles(1) = Tmp ※
End If
(注:実際には0、1等の添字はカウンタ変数等で扱わないと無意味)
上記の※では構造体をデータの集まりとして処理しています。
Profiles(0)={名前="A",身長=Aさんの身長,体重=Aさんの体重}
Profiles(1)={名前="B",身長=Bさんの身長,体重=Bさんの体重}
(注:上記のようなプログラム記述法はありません。実際のコードとして記述するとエラーになります)
例えば、上のようなデータが入っていた場合、適切に『構造体をデータの集まりとして処理』しているならば、
Profiles(n)={名前="A",身長=別人の身長,体重=別人の体重}
のような、ごちゃ混ぜのデータにはなりません。
If Profiles(0).体重 < Profiles(1).体重 then
Dim Tmp As Integer
Tmp = Profiles(0).体重
Profiles(0).体重 = Profiles(1).体重
Profiles(1).体重 = Tmp
End If
当然ながら、上記のように『構造体をデータの集まりとして処理』せずに、体重のみをソートするようなプログラムコードを書くことは可能です。
その場合、何のためにわざわざ構造体をつかうのかはともかくとして、動作上の問題はありません。
Profiles(n)={名前="A",身長=Aさんの身長,体重=別人の体重}
となるでしょうが。
No.1
- 回答日時:
> すると体重だけがソートされてしまうのでしょうか?
> それとも構造体ごとソートされてくれるのでしょうか?
ソートのアルゴリズム次第だと思いますよ。
体重で比較し構造体ごとスワップかければ構造体ごとソートされます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでの色付け 5 2022/10/09 18:58
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語 2 2022/07/21 00:02
- 数学 正四面体を重ねてできる構造物とは? 2 2023/04/15 00:27
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- 工学 西洋の教会の鐘で巨大な鐘を揺らして鳴らすのは、物理的にどんなメリットがあるの? 9 2022/12/13 08:46
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
構造体配列のソート
Visual Basic(VBA)
-
構造体を使っての集約、並べ替え方法
Visual Basic(VBA)
-
VB6でデータを昇順に並べ替える
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(VBA) Dir 関数で取得するファ...
-
C言語・要素除去
-
System.IO.Directory.GetFiles...
-
C# DataTableの行をソートしてD...
-
ファイル名「1.jpg ~10.jpg~...
-
Excel VBA テキストボックス内...
-
VBA基本構文の作り方 2列の...
-
Excelですべての組合せ(重複組...
-
excel VBA リストビューの行...
-
DataGridViewでのソート制御
-
ListViewのソートについて
-
C++ 入力した3つのint型の整数...
-
DataGridViewの昇順降順。
-
ソートのアルゴリズム
-
VB6でデータを昇順に並べ替える
-
VB.NETでファイル名順にファイ...
-
VBScriptで重複レコードを削除...
-
C# DataGridView のヘッダーセ...
-
excel VBA の条件をつけての列...
-
C言語でファイルの中身をソー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
あるディレクトリ内のファイル...
-
C言語・要素除去
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
C言語でアナグラムを求めるプロ...
-
2次元配列を複数項目でソートし...
-
C# DataTableの行をソートしてD...
-
DataGridViewソート時に先頭行...
-
n番目に大きい数を求めるアル...
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
配列の問題
-
10個の整数を入力して小さい順...
-
構造体配列の並べ替え
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
DataGridViewの昇順降順。
おすすめ情報