ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

さらにデータの保持方法を変更しつつ悩む

データの保持方法を、日付と特有の番号を2次元配列の添字にして、データを連想配列として保持する方法から、単純な連想配列にしてデータを保持する方法に書き換えたと、以前の記事で書きました。
ajya.hatenablog.jp

テストをしていると、新たな不具合を発見しました。
不具合の原因を調べると、特有の番号がある条件に該当する場合は、同じ日付を持つ特有の番号の仲間のデータに、処理に使った特有の番号で計算した結果の値の反映が必要でした。

データは、特有の番号と日付の2次元配列の添え字にしていて、データを連想配列として保持しています。
[特有の番号][日付][連想配列の添字1 => データA, 連想配列の添字2 => データC]
という形です。
特有の番号毎の日付で連続して処理するために考えた構造です。

特有の番号毎に日付で連続して処理するのは効率がいいのですが、不具合の対処のためには、同じ日付を持つ特有の番号の仲間のデータに結果の値の反映が必要です。
日付順に並べ替えたうえで、
[日付][特有の番号] = [連想配列の添字1 => データA, 連想配列の添字2 => データC]
という形にして、日付単位でループするというのも考えましたが、新たな不具合対処で再度の修正が必要になる可能性もあります。

悩んだ末に、以前と同様に、
[] = [連想配列の日付の添字 => 日付, 連想配列の特有の番号の添字 => 特有の番号, 連想配列の添字1 => データA, 連想配列の添字2 => データC]
という単純な連想配列に変更しました。

パソコンで仕事中
unsplash-logoDanial RiCaRoS

検索しなければならないので処理が増える

データの保持方法の変更を始め、不具合の対処のために、同じ日付を持つ特有の番号の仲間のデータに結果の値の反映も行うようにもして、途中段階までは正常に動作しているのが確認できました。
作成したソースコードを見ると、単純な連想配列から日付と特有の番号の組み合わせが一致するデータを探して反映したり、次のデータが日付が現在の日付と異なれば、不具合対処で追加した処理を呼び出したりと、これまでにはなかった処理が随分増えています。
単純な連想配列のために増えたソースコードを見ると、
[日付][特有の番号] = [連想配列の添字1 => データA, 連想配列の添字2 => データC]
という2次元配列の方が効率が良かったのかもしれないと考えるようになりました。

あるいは
[日付-特有の番号] = [連想配列の日付の添字 => 日付, 連想配列の特有の番号の添字 => 特有の番号, 連想配列の添字1 => データA, 連想配列の添字2 => データC]
というように、検索に使う日付と特有の番号の組み合わせの条件を添字にしてしまう方が効率がいいのかもしれません。


全ての箇所の修正が終わったわけではないので、修正が終わった後、今後最適な形式を求めての検討が続きます。