2次元配列をバブルソートする方法

生産スケジューラー

2次元配列をバブルソートする方法 【テーブルである2次元配列はキーとその他のプロパティで定義されるクラスであり実体化することで値を格納できる】


固定長データ定義テーブルの生成

やりたいことは「勤怠データにある多数のフィールドの中から4フィールドだけを固定長CSVフォーマットとして生成」するために必要な「テーブルに格納されたフォーマット定義情報を出力順に2次元配列に格納」することです。まずテーブルの値を2次元配列に格納し、次に2次元配列を出力順にソートします。

固定長データ定義テーブルの生成

CSVフォーマットに含めたい勤怠データのフィールドは

  1. 従業員コード
  2. 部門コード
  3. 勤務時間
  4. 工場コード

の4つであり、フォーマット定義情報(各フィールドのプロパティ)は以下のとおり。

  1. 上記4フィールドのコード(キープロパティ)
  2. 出力順
  3. 空白埋めorゼロ埋め
  4. 少数点位置
  5. 桁数
  6. 必須or任意

ここで使うアルゴリズムがバブルソートとループ、というよりバブルソートはループの入れ子構造です。前準備としてテーブルの値を2次元配列クラスとして定義するので、このお題って情報処理の基本盛りだくさんの良問じゃないかなww。

2次元配列

 

  • 万物は属性(プロパティ)からなるクラスによって実体化されたインスタンス(オブジェクト)であり、クラスのキーはアイデンティティである。
2次元配列

新規クラス追加

このインスタンスがOracleのサービスだった場合には管理者が必ず1人居て複数のスキーマ(ユーザー)を定義することができます。またOracle DB(スーパークラス)の中に複数のインスタンスを起動・停止することも可能ですが、インスタンスの数と同数のサービスを提供するため負荷がかかります。

要は2次元配列はテーブルであり、テーブルはクラスで定義され、クラス定義はキーとなるプロパティとその他のプロパティで構成され、これでもってインスタンス(オブジェクト)を生成し、はじめてフォーマット定義情報を格納することができます。

2次元配列(テーブル)の書き方はArray(列, 行)なので配列の定義はArray(5, 出力フィールドの数)となり、まずはArray(0, 0)~Array(0, objectCount-1)にキープロパティであるコード(勤務時間・従業員コード・部門コード・工場コード)が格納されます。

そしてArray(0, 0)からArray(5, 0), Array(0, 1)からArray(5, 1)・・・というようにキーごとのプロパティの値が格納されていきます。

2次元配列

ちなみにExcelのセルもA1, B1, C1・・・のように列行の順だが、VBAのCellsプロパティでセルを指定する場合はWorksheets("sheet1").Cells(行, 列)のように行と列を逆に指定することに未だに戸惑うのは僕だけだろうか・・・。

バブルソート

2次元配列に格納されたフォーマット定義情報は「出力順」にソートしておかないと配列アルゴリズム上都合が悪い。
バブルソート
バブルソートは概念的には非常に判りやすいソート方法だが、これを絵を描かずして他人に正確に伝えるうまい説明があったら教えて欲しいくらいで、非常に高度な日本語力が要されると思いますw。

「自分より下にある数字と順番に比較していき、大小逆なら入れ替える、という処理を最後の数字まで繰り返す」、、、微妙。これにより一番小さい値を確定、二番目に小さい値を確定・・・n-1番目に小さい値を確定という具合に最後の1つが残るまで繰り返します。
バブルソート

上述のとおりバブルソートは外ループと内ループの二重構造になります。

    '0からobjectCount-2番目まで順番に出力順の値を基点とする(外ループ)
    f = 0
    Do

        'f番目の出力順の値をf+1,...objectCount-1番目(最終値)まで比較(内ループ)
        e = f + 1
        Do

            If Val(Array(0, f)) > Val(Array(0, e)) Then

                '次の値より大きければ退避
                Temp(0, f) = Array(0, f) '出力順
                Temp(1, f) = Array(1, f) 'フィールド名
                Temp(2, f) = Array(2, f) '空白埋めorゼロ埋め
                Temp(3, f) = Array(3, f) '少数点位置
                Temp(4, f) = Array(4, f) '桁数
                Temp(5, f) = Array(5, f) '必須or任意

                '入れ替え
                Array(0, f) = Array(0, e) '出力順
                Array(1, f) = Array(1, e) 'フィールド名
                Array(2, f) = Array(2, e) '空白埋めorゼロ埋め
                Array(3, f) = Array(3, e) '少数点位置
                Array(4, f) = Array(4, e) '桁数
                Array(5, f) = Array(5, e) '必須or任意

                '退避した値を戻す
                Array(0, e) = Temp(0, f) '出力順
                Array(1, e) = Temp(1, f) 'フィールド名
                Array(2, e) = Temp(2, f) '空白埋めorゼロ埋め
                Array(3, e) = Temp(3, f) '少数点位置
                Array(4, e) = Temp(4, f) '桁数
                Array(5, e) = Temp(5, f) '必須or任意

            End If

            e = e + 1
        Loop While e < objectCount

        f = f + 1
    Loop While f < objectCount - 1

ループ処理

バブルソートのコードにあるDo ~ Loop while文は「最後の値まで読ませる」処理に使いやすく、条件文が処理の後にあるため、最低一発目のデータについては処理を行ないます。

これなら処理対象レコード件数が0件しかないケースにも対応できますが、Do While ~ Loopのように条件文が処理の前にある場合は一発目のデータが条件に合わなければ一度もループを通らないので結果が出力されません。

今回はループ回数が定義可能なのでFor ~ next文でも対応できます。
ループ処理





おすすめ記事一覧

1

よく会計の世界では「利益と減価償却でキャッシュを作る」と言われ、これは企業のキャッシュの源泉が利益と減価償却の二種類あるという意味なのですが、減価償却費はキャッシュの流出のない費用であり、P/L上の当期利益額よりも実際には減価償却費分だけキャッシュは多く残っているという数字遊びをしているだけで、物理的にキャッシュが生み出されるわけではありません。

2

毎月の生産でいくらコストがかかったかを計算する原価計算(実際原価)業務は、インドネシアではシステム化されている事例は少なく、細かく計算すれば時間がかかり、どんぶり勘定だと見たい情報が見られず、コロナ禍の影響で時間に余裕が出来た今は収益改善という観点から原価計算のやり方を見直す絶好の機会です。

3

ジャカルタでは、2019年4月にMRT地下鉄の第1期区間(総延長15.7km)が正式開通しましたが、コロナ禍の中にあった今年6月に、現在の始発駅であるPlaza Indonesia前のBendaran HI駅から、北ジャカルタのKotaまでの6.3km、西ジャカルタのアンチョールの車両基地までの5.2kmの総延長11.5km(11駅)を第2期区間として工事が開始されました。

4

2014年に誕生したジョコウィ政権は、事あるごとに中国寄りと言われ、2015年に中国と日本が受注合戦を繰り広げ日本の新幹線方式での導入が確実視されていたジャカルタ~バンドゥン高速鉄道案件では、インドネシア政府が手のひら返し中国案に鞍替えし、日本を袖にしたのは記憶に新しいところですが、南シナ海の南方にあるナトゥナ諸島周辺の排他的経済水域(EEZ)は、中国が主権を主張する「九段線」と呼ばれる境界と重複しており、中国漁船が公船を伴って活動する違法漁業問題で中国と対立しています。

大統領選挙で考えたギャップにハマるということ 5

ギャップにキュンとするというのは人間の本能みたいなもので、ジョコウィの私利私欲のない素朴なおじさん像と、その実強力なリーダーシップを発揮する実務派という内面が、一見普通の人だが実はスゴイというギャップ好きのインドネシア人に大ウケして、大衆は一種の集団催眠状態にあるようです。

情報の質のレベル 6

見える化された結果を共有化することで問題点が共通認識されますが、共有化が進むことで情報の持つ希少価値が薄れて困る人間がいる場合、有益な情報を独占することでポジションを高めようという政治力が働きます。

7

日本人がインドネシアに来ると、インドネシア人ののんびり加減にイライラするというのは昔からよく聞く話で、インドネシア在住日本人にとってのバイブル的小説である深田祐介著「ガルーダ商人」の中でも、インドネシア宗教省の高官が日本人とインドネシア人を自宅に招待する際に、インドネシア人向けの招待状には、遅刻することを前提にパーティ開始時間を三十分早く書いておくという記述があるほどです。

宗教によって異なる「死んだらどうなる」の考え方 8

キリスト教もイスラム教もともにユダヤ教から派生した宗教であり、それぞれイエス・キリスト(本人が神)またはアッラーという唯一無二の神を信じます。

株価操作なんてインドネシア株では当たり前 9

株価は売り注文と買い注文により変動し、大量の売り注文を買う注文がたくさん入れば、他の投資家達は「俺も俺も」と続くことで株価が上がります。

心臓に毛が生えたインドネシア人のずうずうしい転職活動を応援してみた 10

インドネシア人は秘密の話は誰かに暴露しないと精神の安定を保てない人が多いため、内緒の話に情報の希少性は少なく信憑性も低いことが多いので、「ここだけの話」という枕詞付きで聞かされる話は話半分に聞いておいたほうがいいかもしれません。

日系企業のインドネシアでの存在意義 11

今のまま日本の人口減が続けば、内需は縮小の一途をたどるわけで、そうなると日本国内市場だけで生き残るのは難しいと判断する国内企業が、海外市場に活路を見出そうとするのは必然です。

チャンスはあるが勝てる分野を見つけるのが難しい 12

実際にインドネシアに住んでみて、自分で動いて人と話しをして、現地の事情を少しずつ理解していくにつれて、インドネシアで起業することが意外と手強いことに気づき、その難しさの原因は、高い送料と関税であったりローカル企業との競争であったり、就労ビザ(IMTA)や外国人技能開発基金(DPKK)などのランニングコストの高さであったりします。

インドネシアのシステムインテグレーション業界 13

先日JETRO(日本貿易振興機構)さんと、インドネシアの中小企業のIT投資について意見交換させていただく機会をいただいたのですが、そこで「システム投資のコストメリットはどのように説明できるのか」という、システムインテグレーターの存在価値にも関わる重要な問題提起がありました。

肉体と精神と心と魂 14

「Body and Soul」といえば、昨日の内閣改造に伴う人事で内閣府政務官に内定した自民党の今井絵理子参議院員がメンバーだったSPEEDのデビュー曲であり、インドネシアの老舗女性ファッションブランド名でもあります。

ジャカルタのラーメン市場 15

僕がインドネシアに初めて来たのが1997年10月、インドネシア語は分からないし、仕事は辛いし、周囲の人間は理不尽だし、一時期日本に帰りたくて仕方がない時期がありましたが、当時自分をかろうじてインドネシアに繋ぎ止める心の支えとなっていたのが、協栄プリンスビル(今のWisma Keiai)の日本食レストラン「五右衛門」であり、ここでキムチラーメンを食べることが唯一の楽しみと言っても過言ではありませんでした。

ブランド力、技術力、資金力の3要素 16

1998年のジャカルタ暴動後、ルピアが暴落し海外からのドル建て債務を抱えた国内企業が利子の支払いに苦しんでいた頃、僕は外貨が獲得できるインドネシアでの新しいビジネスを探していました。

日本とインドネシアの間でのタイムマシン経営が通じなくなっている件 17

先進国と後進国との間にある流行のタイムラグを利用して、先進国での成功例を後進国で実践するビジネスモデルをタイムマシン経営といいますが、インターネットの普及に伴い情報がフラット化してしまい、モノと情報のタイムラグが限りなく小さくなった今、先駆者である中小零細同業他社が乱立し市場が出来上がったところに、後発の大手が参入し先発零細を駆逐していく、という典型的な負けパターンにはまります。

サリナデパートとマクドナルド 18

本日5月10日を最後にインドネシアのマクドナルド第1号店であるサリナデパート店(Sarinah)が閉店になりますが、ジャカルタのショッピングモールが新しいコンセプトでモダンにリニューアルされ続ける中で、僕がインドネシアに来たばかりの20数年前には、若者の待ち合わせ場所の定番でもあったサリナデパートやブロックMのパサラヤ(Pasaraya)などは完全に時代に取り残されてしまいました。

不景気の歴史 19

僕がインドネシアに来てからこれまで何度か経済不況を見てきましたが、今回の新型コロナウィルスの感染拡大により、間違いなく景気後退しますので、数年後にはこれがコロナショックとかコロナ不況とか呼ばれるようになるのかもしれません。

日本のバブル経済崩壊後とインドネシアの通貨危機後 20

自分が大学に入学したのがバブル経済末期の1991年、土地も株価もMAX爆上げして、三菱地所がアメリカの象徴であるロックフェラーセンタービルを買収し、ジュリアナ東京でワンレンボディコン(登美丘高校ダンス部のバブリーダンスみたいなやつ)のお姉さん達が扇子振って踊っている時期でした。

内需と外需の自国経済に及ぼす影響 21

公共事業投資を行っても、お金が企業内や個人の貯蓄に滞留してしまい国内消費が増えないのが日本の状況であり、国内消費は増えても消費材の輸入品比率が高く、国内資産が海外に流出しているのがインドネシアの状況です。

2019年の総選挙を前にインドネシア政治史のおさらい 22

来年の大統領選挙(Pemilu Pilpres Pileg Indonesia 2019)に向けての選挙運動(Kampanye)を解禁するにあたり、投票用紙に印字される順番はジョコウィ現職大統領・マフル副大統領候補組が1番、プラボウォ大統領候補・サンディアガウノ副大統領候補組が2番と決まりました。

コーヒーをもっと楽しくもっと美味しく 23

インドネシアは北回帰線と南回帰線をはさむコーヒーベルトに位置するコーヒー栽培に適した国で、1602年の東インド会社の進出を契機にオランダの植民地支配が300年以上続き、その間アラビカ種のコーヒーが持ち込まれ、気候のいい高原地帯で栽培が開始されました。

インドネシア人の悪魔祓い 24

人間誰しも自分の中に悪魔が潜んでおり、それが何らかのきっかけで表面に出て来るという考え方自体には、背景に宗教が有るか無いかの違いだけで、基本的に理解できる話であり、それを信じるか信じないかは別として、そういう考えがあることを認めることは大切なことだと思います。

-生産スケジューラー

© 2020 バテラハイシステム Powered by STINGER