Statistic
(またはグループStatistics
)が説明しているように、それAchievement
/それら/はクラスStatistic
に保存されるべきではありませんか?Achievement
たとえば、改良されたAchievement
クラス:
public class Achievement {
SparseArray<Statistic> mStatistics = new SparseArray<Statistic>();
// to get a reference to the statisctics that make this achievement
public SparseArray<Statistic> getStatics() {
return mStatistics;
}
// add a new Statistic to these Achievement
public void addStatistic(int statisticId, Statistic newStat) {
// if we don't already have this particular statistic, add it
// or maybe update the underlining Statistic?!?
if (mStatistics.get(statisticId) == null) {
mStatistic.add(newStat);
}
}
// remove the Statistic
public void removeStatistic(int statisticId) {
mStatistic.delete(statisticId);
}
// check to see if this achievment has a statistic with this id
public boolean hasStatistics(int statisticId) {
return mStatistic.get(statisticId) == null ? false : true;
}
// rest of your code
}
また、Statistic
クラスはそのターゲット (Statistic1 の 50 の値) 値をフィールドとして格納する必要があります。
アチーブメントには関連する多くの統計があります。この関係は、各アチーブメントを必要な統計 (およびその値) に関連付ける必要があります。たとえば、Achievement1 には値 50 (またはそれ以上) の Statistic1 と値 100 (またはそれ以上) の Statistic2 が必要です。
統計はすでに実績に保存されているため、実績 (または実績自体) の ID の配列/リストを保存するだけで、これらの実績を作成した統計にアクセスできます。
統計が与えられた場合、関連する実績が何であるかも知る必要があります (統計が変更されたときにそれらを確認するためです。
上記の実績の配列/リストを使用し、それらを繰り返して、実績がその特定のものを保持しているかどうかを確認しますStatistic
。
ArrayList<Achievement> relatedAchievements = new ArrayList<Achievement>();
for (Achievement a : theListOfAchievments) {
if (a.hasStatistics(targetStatistic)) {
relatedAchievements.add(a); // at the end this will store the achievements related(that contain) the targetStatistic
}
}
もう 1 つのオプションは、またはメソッドのいずれかが呼び出されるStatistic
たびに更新される , マッピングを持つアチーブメントを保存する静的マッピングをどこかに置くことです。addStatictic
removeStatistic
コードに関しては、オブジェクトが必要なく、Statistic
オブジェクトへの参照を保持するだけで満足しているid
場合は、次のように改善できますstatisticsForAnAchievement
。
SparseArray<SparseIntArray> statisticsForAnAchievement;
// the index of the SparseArray is the Achievement's id
// the index of the SparseIntArray is the Statistic's id
// the value of the SparseIntArray is the Statistic's value