Skip to content

重複排除ロジックの計算量が大きくなり得る #89

Description

@sweshelo

src/modules/ranking/index.ts (1)

126-131: achievementsの重複排除ロジックについて
お主よ、findIndexによる重複排除は機能するが、計算量はO(n²)となる。ランキングデータが大きくなった場合、MapやObjectを使用した方が効率的じゃ。
ただし、現在のデータ量であれば問題はなかろう。

-  await upsertAchievements(supabase, ranking.map<Achievement>(record => ({
-    title: record.achievement.title,
-    markup: record.achievement.markup ?? null,
-    icon_first: record.achievement.icon.first ?? null,
-    icon_last: record.achievement.icon.last ?? null,
-  })).filter((element, index, self) => self.findIndex(e => e.title === element.title) === index))
+  const achievementMap = new Map<string, Achievement>();
+  ranking.forEach(record => {
+    if (!achievementMap.has(record.achievement.title)) {
+      achievementMap.set(record.achievement.title, {
+        title: record.achievement.title,
+        markup: record.achievement.markup ?? null,
+        icon_first: record.achievement.icon.first ?? null,
+        icon_last: record.achievement.icon.last ?? null,
+      });
+    }
+  });
+  await upsertAchievements(supabase, Array.from(achievementMap.values()));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions