0

配列のソートについて質問がありました。

私はこのような配列を手に入れました:

long[][] allDate = new long[lenght][2];

値は次のとおりです。 allDate[][0]日付をミリ秒でallDate[][1]表し、この場合は値を表します。たとえば、以前の日付の価格です。

allDate[0][0] = 142142141
allDate[0][1] = 90

allDate[][0]日付の値は常に将来のものであり、私がやりたいのは、この日付を時系列の昇順で並べ替えることです。しかし、問題は、Jfreechartの折れ線グラフに追加できるように、価格を維持したいということです。

このループで

    for (int i = 0; i < a7; i++) {
        int day = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60 * 24));
        int month = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60));
        int year = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60));
        s1.add(new Day(day, month, year), (eWallet + allDate[i][1]));
    }

それを並べ替える方法はありますか?

4

1 に答える 1

4

allDate[][0] は日付をミリ秒単位で表し、allDate[][1] は値を表します。この場合、前の日付の価格です。

したがって、最初に行うことは、それらを 2D 配列として格納しないようにすることです。代わりに、値のペアの 1D コレクション (配列またはリスト) を格納します。

PriceSnapshot[] prices = ...;

PriceSnapshotタイムスタンプ(long、 、 Joda DateTimeInstantなど)と価格で構成されます。

Comparer<PriceSnapshot>その時点で、時間で比較するa を簡単に記述し、それを使用して並べ替えることができます。もちろん、Comparer<long[]>代わりに a を書くこともできますが、それはほとんど良いことではありません。

(また、現在のループでは、「現在の時刻」を 3 回取得していることに注意してください。つまり、異なる日付になる可能性があります。悪い考えです。「今」のスナップショットを1 つ取得し、それを繰り返し使用します。)

于 2013-03-18T12:46:27.223 に答える