From d14e3909d4fd46c84c28af6580398b422d2dc1d1 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 2 Mar 2026 17:37:45 +0900 Subject: [PATCH] search/filter_kanji: keep order when deduplicating --- lib/search/filter_kanji.dart | 10 +++++++++- test/search/filter_kanji_test.dart | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/search/filter_kanji.dart b/lib/search/filter_kanji.dart index 4a00dce..95a0db8 100644 --- a/lib/search/filter_kanji.dart +++ b/lib/search/filter_kanji.dart @@ -18,7 +18,15 @@ Future> filterKanjiWithDbConnection( .then((value) => value.map((e) => e['literal'] as String).toSet()); if (deduplicate) { - return filteredKanji.toList(); + final List result = []; + final Set seen = {}; + for (final k in kanji) { + if (filteredKanji.contains(k) && !seen.contains(k)) { + result.add(k); + seen.add(k); + } + } + return result; } else { return kanji.where((k) => filteredKanji.contains(k)).toList(); } diff --git a/test/search/filter_kanji_test.dart b/test/search/filter_kanji_test.dart index ef7d96c..ecc2e25 100644 --- a/test/search/filter_kanji_test.dart +++ b/test/search/filter_kanji_test.dart @@ -26,4 +26,27 @@ void main() { expect(result.join(), '漢字地字'); }); + + test('Filter kanji - deduplicate', () async { + final connection = await setupDatabaseConnection(); + + final result = await connection.filterKanji([ + 'a', + 'b', + 'c', + '漢', + '字', + '地', + '字', + 'か', + 'な', + '.', + '!', + '@', + ';', + '々', + ], deduplicate: true); + + expect(result.join(), '漢字地'); + }); }