掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
テキストボックスに入力した数字を小さい順に並べてラベルに表示するには? (ID:103175)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ソートのプログラムなんて初心者に自分の頭でアルゴリズムを > 考えさせる定番の課題だと思うんですが、 課題の定番かどうかの判断は保留しますが、学習目的の投稿については マルチポスト先にて回答しているので、こちらは別の切り口で書いています。(^^; 是非は別として、「早く仕上げること」が主目的なのであれば、 既知のライブラリやサンプルを流用して仕上げるのも選択肢かな、と。 なお私のサンプルは、要件に挙げられている非整数が含まれた場合の メッセージボックス出力が盛り込まれていないので、実際には そのものズバリな回答ではなかったりします。 > 偽プログラマ 私自身、素で組めるソートアルゴリズムは泥臭いバブルソート程度なんですよね。 二分木ソート、ノームソート、イントロソートなどといった、より高度な ソートアルゴリズムでの実装となると、資料なしには組めません。 > Recordset 使っちゃうとか、 今回のケースはともかくとして、複数の項目で並び替える場合などには 便利なので、しばしば利用していたりします。(^^;) ---------------------- さて別案。 今度は、JScript の Array.sort メソッドを利用してソートしています。 (こちらも、メッセージの表示機能は省いています) Option Explicit Private Sub Text1_Change(Index As Integer) Label1.Caption = Replace(GetValues(), ",", vbNewLine) End Sub Private Sub Form_Load() Dim txt As TextBox For Each txt In Text1 txt.Text = "" Next End Sub Private Function GetValues() As String Dim sc As Object Set sc = CreateObject("ScriptControl") '「Set sc = CreateObject("MSScriptControl.ScriptControl")」でも OK 。 sc.Language = "jscript" Dim objArray As Object Set objArray = sc.Eval("a=new Array()") sc.ExecuteStatement "function Push(s){if(!isNaN(parseInt(s)))a.push(s)}" Dim txt As TextBox For Each txt In Text1 sc.Run "Push", txt.Text Next sc.ExecuteStatement "a.sort(function(x,y){return x-y})" GetValues = CallByName(objArray, "toString", VbMethod) '「GetValues = objArray.toString()」でも OK 。 '「GetValues = objArray.ToString()」だと NG 。 End Function
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.