0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ぷよクエをたのしく!アプリをつくってみよう!(おまけ:特徴語ソート)

0
Last updated at Posted at 2026-10-01

せっかくなのでソートしたい

特徴語を抽出でき、これまで取得した攻略サイトの文章をいろいろ試してみた。
せっかく抽出できたので、「辞書順(インデックス順)」でソートしてみようと思った。
とりあえず「ガーディアンテイルズ」というゲームで試してみた。

文字列のソート?

辞書順なので「昇順ソート」で十分。元ネタを用意した。
※「ソートの元ネタ」をクリックすると見れます

ソートの元ネタ

通常攻撃:マジックヒール
マジックボール:敵
ダメージ
マジックボール
ヒールレーザー:レーザー
デバフ
特殊能力:ヒールボール
回復力
30%分、回復
(All)
(負傷)
パッシブ:マジックヒール
味方全員
30%分回復
通常攻撃:東方剣術
放ち、敵
特殊能力:闘志
ボスモンスター
与えるダメージ
25%上昇
(転倒)
パッシブ:東方剣術
【飛燕】
DPS
値するダメージ
咆哮:周囲
特殊能力:護身
50%以下
受けるダメージ
30%減少
(浮遊)
【ローリングドラゴン】
通常攻撃:ドラゴンブレス
特殊能力:ディープブレス
スキル使用後
5秒間、30%上昇
パッシブ:ドラゴンブレス
【フレイムストライク】
値する範囲ダメージ
20%減少
通常攻撃:獲物追跡
ジャンプ
振り回し
特殊能力:フレンジー
攻撃速度
60%上昇
ジャンプ攻撃
パッシブ:獲物追跡
通常攻撃:ファニングショット
特殊能力:静謐射撃
20%上昇
パッシブ:ファニングショット
【砲撃】
通常攻撃:武器
特殊能力:光
ガーディアン
光属性ダメージ
受ける
10秒間、防御力
25%減少
パッシブ:武器
【審判】
チャンピオンソード
通常攻撃:爆弾狂
リンゴ爆弾
範囲内
追加ダメージ
レベル
パッシブ:爆弾狂
【大爆発】
連鎖爆発
経路上の敵
通常攻撃:王国守護剣法
盾剣術:片手剣
範囲挑発
特殊能力:護衛
5マス以内
パーティメンバー
クレイグ
50%以上
パッシブ:王国守護剣法
防御力
5秒間50%上昇
通常攻撃:野獣
特殊能力:狩猟本能
30%上昇
パッシブ:野獣
【猛襲】
通常攻撃:狙撃
2種類
射撃体勢
照準射撃:敵
3秒間、ダメージ
パッシブ:狙撃
【ブルズアイ】
無差別
特殊能力:復讐
高くジャンプ
通常攻撃:炎
格闘術
フレイムブロー:目
爆破:前方
特殊能力:炎
支配者
火属性以外
25%上昇
火属性パーティメンバー
15%上昇
パッシブ:炎
270%
与え、味方全員
火属性攻撃力
8秒間30%上昇
通常攻撃:4番打者
ボール
特殊能力:ハッスルプレー
移動層度
パッシブ:4番打者
バット
通常攻撃:帝国剣術
両手剣
振り回し、周囲
特殊能力:逆襲
6秒間、攻撃力
パッシブ:帝国剣術
【天罰】
通常攻撃:プラズマグレネードランチャー
プラズマグレネード
範囲ダメージ
特殊能力:闇
追跡者
移動速度
パッシブ:プラズマグレネードランチャー
【プラズマショックウェーブ】
通常攻撃:仙山拳
特殊能力:運気
5秒間、クリティカル率
パッシブ:仙山拳
【発動】
放ってDPS
与え、5秒間、光属性耐性
通常攻撃:ネイチャーエナジーブラスター
エネルギー
特殊能力:マジックチャージ
チャージ
30%上昇
パッシブ:ネイチャーエナジーブラスター
【ローズグラブ】
300%
30%減少
通常攻撃:ネイビープライド
プリング
パッシブ:ネイビープライド
シールド
通常攻撃:バイクアクションシーン
バイク
特殊能力:スピードアクション
30%増加
パッシブ:バイクアクションシーン
【サマーソルトバイク】
高難易度
バイクアクション
525%
通常攻撃:狐
20%減少
特殊能力:狐尾防御
8%上昇
最大、8回適用
パッシブ:狐
クリティカル率
10秒間10%上昇
通常攻撃:道術
20%上昇
バスケット
回復量
パッシブ:道術
475%
風:扇
風:前方
特殊能力:初夏
使用すると体力
もっとも低いパーティメンバー
20%分、回復
【花火大会】
50%分、回復
5秒間、20%上昇
通常攻撃:司祭神
クリティカルダメージ
特殊能力:活力補充
武器スキルチャージ速度
50%分、攻撃力
被ダメージ
パッシブ:司祭神
聖光線
攻撃力
5秒間30%増加
通常攻撃:サウンドウェーブ
特殊能力:応援
サウンドウェーブ
10%回復
5秒間防御力
パッシブ:サウンドウェーブ
【ブレイブサウンド】
240%
5秒間30%上昇
通常攻撃:メカ操縦術
ヒートブレイドコンボ:ヒートブレイド
タクティカルシールヂ:周辺
3秒間、防御力
50%上昇
特殊能力:ディフェンスレギュレーター
防御力差
15%分上昇
パッシブ:メカ操縦術
【マルチロケット】
多連装ロケット
値する遠隔ダメージ
15秒間、10%減少
通常攻撃:氷柱射手
5秒間20%減少
特殊能力:魔力増強
氷柱射手
スキルダメージ
25%分増加
パッシブ:氷柱射手
【雹】
通常攻撃:護符拳法
気功拳:気
雷鳴拳:気功拳
雷鳴拳
0.5秒減少
特殊能力:蘇生符
50%以下
20%回復
1回発動
パッシブ:護符拳法
【調和符】
20%回復
障害物
特殊能力:エグゼンプション
一時的
50%、防御力
50%上昇
通常攻撃:デザートエルフ
30%
デザートアロー:空中
10%減少
特殊能力:ウィンドマスター
デザートアロー
パッシブ:デザートエルフ
【ストームアロー】
ティニア
150%
通常攻撃:サウザンドニードル
特殊能力:迅速
5秒間、攻撃力
30%、移動速度
パッシブ:サウザンドニードル
【ジャイアントアンブレラ】
360%
通常攻撃:アイスカッター
遠隔ダメージ
特殊能力:貴族
3秒間、攻撃力
パッシブ:アイスカッター
【アイスフィールド】
対象周辺
200%
10秒間、50%上昇
通常攻撃:ダークウルフ
ダークウルフ
近接ダメージ
特殊能力:狼
通常攻撃時、ダークウルフ
パッシブ:ダークウルフ
【ビーストクロー】
毒キノコ:毒キノコ
範囲回復:自身
範囲回復
2回上昇
【毒キノコ投下】
通常攻撃:ウェポンシューター
闇属性ダメージ
パッシブ:ウェポンシューター
【ウェポンサージ】
通常攻撃:吸血コウモリ
コウモリ
特殊能力:不死
40%回復
60秒
一度だけ発動
パッシブ:吸血コウモリ
【バットストーム】
通常攻撃:チャーム
3秒間20%減少
特殊能力:スピリットサクション
10%分、自身
パッシブ:チャーム
通常攻撃:妖精
矢:体力
特殊能力:水分吸収
水属性
1%分、回復
パッシブ:妖精
50%分回復
通常攻撃:マギトンパック
マギトンパック
継続ダメージ
特殊能力:マギトンエネルギー転換
闇属性モンスター
10秒間、攻撃力
パッシブ:マギトンパック
【ゴーストイジェクター】
通常攻撃:スペースアロー
特殊能力:生存本能
10%回復
3秒間無敵状態
パッシブ:スペースアロー
【無限ループ】
通常攻撃:ロイヤルブラッド
皇室剣術:剣
士気チャージ:周辺
特殊能力:王室防御術
10%生成
1%生成
パッシブ:ロイヤルブラッド
【陣頭指揮】
8秒間、50%上昇
通常攻撃:ミサイルシューター
特殊能力:用意周到
3秒間攻撃
4秒間ダメージ
パッシブ:ミサイルシューター
【集中砲火】
ミサイル
フラスコ
攻撃力減少効果
通常攻撃:ダンシングファイヤー
特殊能力:自己陶酔
ダンシングファイヤー
後、5秒間ダメージ
パッシブ:ダンシングファイヤー
【メテオシャワー】
自由自在
特殊能力:狂戦士
3%回復
通常攻撃:ソーマ格闘術
連続攻撃
特殊能力:岩
50%減少
パッシブ:ソーマ格闘術
アッパーカット

文字列のソートなので、こんな感じに実装してみた。

const words = [
*ソート元ネタたち*
]
export function sortEx01() {
    const sorted = words.sort((a, b) => { return a.localeCompare(b) })
    sorted.forEach(w  => { console.log(w) })
}

そして、その結果。

ソート結果

(All)
(転倒)
(浮遊)
(負傷)
【アイスフィールド】
【ウェポンサージ】
【ゴーストイジェクター】
【サマーソルトバイク】
【ジャイアントアンブレラ】
【ストームアロー】
【バットストーム】
【ビーストクロー】
【プラズマショックウェーブ】
【ブルズアイ】
【ブレイブサウンド】
【フレイムストライク】
【マルチロケット】
【メテオシャワー】
【ローズグラブ】
【ローリングドラゴン】
【花火大会】
【集中砲火】
【審判】
【陣頭指揮】
【大爆発】
【調和符】
【天罰】
【毒キノコ投下】
【発動】
【飛燕】
【砲撃】
【無限ループ】
【猛襲】
【雹】
0.5秒減少
1%生成
1%分、回復
10%回復
10%回復
10%減少
10%生成
10%分、自身
10秒間、50%上昇
10秒間、攻撃力
10秒間、防御力
10秒間10%上昇
15%上昇
15%分上昇
150%
15秒間、10%減少
1回発動
20%回復
20%回復
20%減少
20%減少
20%上昇
20%上昇
20%分、回復
200%
240%
25%減少
25%上昇
25%上昇
25%分増加
270%
2回上昇
2種類
3%回復
30%
30%、移動速度
30%減少
30%減少
30%上昇
30%上昇
30%増加
30%分、回復
30%分回復
300%
360%
3秒間、ダメージ
3秒間、攻撃力
3秒間、防御力
3秒間20%減少
3秒間攻撃
3秒間無敵状態
40%回復
475%
4秒間ダメージ
50%、防御力
50%以下
50%以下
50%以上
50%減少
50%上昇
50%上昇
50%分、回復
50%分、攻撃力
50%分回復
525%
5マス以内
5秒間、20%上昇
5秒間、30%上昇
5秒間、クリティカル率
5秒間、攻撃力
5秒間20%減少
5秒間30%上昇
5秒間30%増加
5秒間50%上昇
5秒間防御力
60%上昇
60秒
6秒間、攻撃力
8%上昇
8秒間、50%上昇
8秒間30%上昇
DPS
アッパーカット
エネルギー
ガーディアン
クリティカルダメージ
クリティカル率
クレイグ
コウモリ
サウンドウェーブ
シールド
ジャンプ
ジャンプ攻撃
スキルダメージ
スキル使用後
ダークウルフ
タクティカルシールヂ:周辺
ダメージ
ダンシングファイヤー
チャージ
チャンピオンソード
ティニア
デザートアロー
デザートアロー:空中
デバフ
パーティメンバー
バイク
バイクアクション
バスケット
パッシブ:4番打者
パッシブ:アイスカッター
パッシブ:ウェポンシューター
パッシブ:サウザンドニードル
パッシブ:サウンドウェーブ
パッシブ:スペースアロー
パッシブ:ソーマ格闘術
パッシブ:ダークウルフ
パッシブ:ダンシングファイヤー
パッシブ:チャーム
パッシブ:デザートエルフ
パッシブ:ドラゴンブレス
パッシブ:ネイチャーエナジーブラスター
パッシブ:ネイビープライド
パッシブ:バイクアクションシーン
パッシブ:ファニングショット
パッシブ:プラズマグレネードランチャー
パッシブ:マギトンパック
パッシブ:マジックヒール
パッシブ:ミサイルシューター
パッシブ:メカ操縦術
パッシブ:ロイヤルブラッド
パッシブ:炎
パッシブ:王国守護剣法
パッシブ:獲物追跡
パッシブ:吸血コウモリ
パッシブ:狐
パッシブ:護符拳法
パッシブ:司祭神
パッシブ:仙山拳
パッシブ:狙撃
パッシブ:帝国剣術
パッシブ:東方剣術
パッシブ:道術
パッシブ:爆弾狂
パッシブ:氷柱射手
パッシブ:武器
パッシブ:野獣
パッシブ:妖精
バット
ヒートブレイドコンボ:ヒートブレイド
ヒールレーザー:レーザー
フラスコ
プラズマグレネード
プリング
フレイムブロー:目
ボール
ボスモンスター
マギトンパック
マジックボール
マジックボール:敵
ミサイル
もっとも低いパーティメンバー
リンゴ爆弾
レベル
闇属性ダメージ
闇属性モンスター
移動層度
移動速度
一時的
一度だけ発動
遠隔ダメージ
火属性パーティメンバー
火属性以外
火属性攻撃力
回復量
回復力
格闘術
気功拳:気
近接ダメージ
経路上の敵
継続ダメージ
後、5秒間ダメージ
光属性ダメージ
攻撃速度
攻撃力
攻撃力減少効果
皇室剣術:剣
高くジャンプ
高難易度
最大、8回適用
使用すると体力
士気チャージ:周辺
支配者
自由自在
射撃体勢
受ける
受けるダメージ
盾剣術:片手剣
照準射撃:敵
障害物
振り回し
振り回し、周囲
水属性
聖光線
多連装ロケット
対象周辺
値するダメージ
値する遠隔ダメージ
値する範囲ダメージ
追加ダメージ
追跡者
通常攻撃:4番打者
通常攻撃:アイスカッター
通常攻撃:ウェポンシューター
通常攻撃:サウザンドニードル
通常攻撃:サウンドウェーブ
通常攻撃:スペースアロー
通常攻撃:ソーマ格闘術
通常攻撃:ダークウルフ
通常攻撃:ダンシングファイヤー
通常攻撃:チャーム
通常攻撃:デザートエルフ
通常攻撃:ドラゴンブレス
通常攻撃:ネイチャーエナジーブラスター
通常攻撃:ネイビープライド
通常攻撃:バイクアクションシーン
通常攻撃:ファニングショット
通常攻撃:プラズマグレネードランチャー
通常攻撃:マギトンパック
通常攻撃:マジックヒール
通常攻撃:ミサイルシューター
通常攻撃:メカ操縦術
通常攻撃:ロイヤルブラッド
通常攻撃:炎
通常攻撃:王国守護剣法
通常攻撃:獲物追跡
通常攻撃:吸血コウモリ
通常攻撃:狐
通常攻撃:護符拳法
通常攻撃:司祭神
通常攻撃:仙山拳
通常攻撃:狙撃
通常攻撃:帝国剣術
通常攻撃:東方剣術
通常攻撃:道術
通常攻撃:爆弾狂
通常攻撃:氷柱射手
通常攻撃:武器
通常攻撃:野獣
通常攻撃:妖精
通常攻撃時、ダークウルフ
特殊能力:ウィンドマスター
特殊能力:エグゼンプション
特殊能力:スピードアクション
特殊能力:スピリットサクション
特殊能力:ディープブレス
特殊能力:ディフェンスレギュレーター
特殊能力:ハッスルプレー
特殊能力:ヒールボール
特殊能力:フレンジー
特殊能力:マギトンエネルギー転換
特殊能力:マジックチャージ
特殊能力:闇
特殊能力:運気
特殊能力:炎
特殊能力:応援
特殊能力:王室防御術
特殊能力:活力補充
特殊能力:岩
特殊能力:貴族
特殊能力:逆襲
特殊能力:狂戦士
特殊能力:狐尾防御
特殊能力:護衛
特殊能力:護身
特殊能力:光
特殊能力:自己陶酔
特殊能力:狩猟本能
特殊能力:初夏
特殊能力:迅速
特殊能力:水分吸収
特殊能力:生存本能
特殊能力:静謐射撃
特殊能力:蘇生符
特殊能力:闘志
特殊能力:不死
特殊能力:復讐
特殊能力:魔力増強
特殊能力:用意周到
特殊能力:狼
毒キノコ:毒キノコ
爆破:前方
範囲ダメージ
範囲回復
範囲回復:自身
範囲挑発
範囲内
被ダメージ
氷柱射手
武器スキルチャージ速度
風:扇
風:前方
放ち、敵
放ってDPS
防御力
防御力差
味方全員
無差別
矢:体力
与え、5秒間、光属性耐性
与え、味方全員
与えるダメージ
雷鳴拳
雷鳴拳:気功拳
両手剣
連鎖爆発
連続攻撃
咆哮:周囲

ソート結果で気になるところ

文字列のソートなので、仕方ないのかもなのが、この結果。
ぱっと見では正しいと思うけど。

3%回復
30%
30%、移動速度
30%減少
30%減少
30%上昇
30%上昇
30%増加
30%分、回復
30%分回復
300%
360%
3秒間、ダメージ
3秒間、攻撃力
3秒間、防御力
3秒間20%減少
3秒間攻撃
3秒間無敵状態

結果を確認すると、数値としてみた場合の違和感を感じてしまう、orz。

Intl.Collator API 使ってみた

比較関数のなかで、文字列の数値部分を取り出して数値比較するのも手だと思うけど。
そういう事情を考慮してくれるAPIがあるらしいので使ってみた。

export function sortEx02() {
    const jaCollator = new Intl.Collator('ja', {
        numeric: true, //数値として比較
    })
    const sorted = words.sort((a, b) => { return jaCollator.compare(a, b) })
    sorted.forEach(w  => { console.log(w) })
}

結果の抜粋。ちゃんとできてるっぽい。

0.5秒減少
1%生成
1%分、回復
1回発動
2回上昇
2種類
3%回復
3秒間、ダメージ
3秒間、攻撃力
3秒間、防御力
3秒間20%減少
3秒間攻撃
3秒間無敵状態
4秒間ダメージ
5マス以内
5秒間、20%上昇
5秒間、30%上昇
5秒間、クリティカル率
5秒間、攻撃力
5秒間20%減少
5秒間30%上昇
5秒間30%増加
5秒間50%上昇
5秒間防御力
6秒間、攻撃力
8%上昇
8秒間、50%上昇
8秒間30%上昇
10%回復
10%回復
10%減少
10%生成
10%分、自身
10秒間、50%上昇
10秒間、攻撃力
10秒間、防御力
10秒間10%上昇
15%上昇
15%分上昇
15秒間、10%減少
20%回復
20%回復
20%減少
20%減少
20%上昇
20%上昇
20%分、回復
25%減少
25%上昇
25%上昇
25%分増加
30%
30%、移動速度
30%減少
30%減少
30%上昇
30%上昇
30%増加
30%分、回復
30%分回復
40%回復
50%、防御力
50%以下
50%以下
50%以上
50%減少
50%上昇
50%上昇
50%分、回復
50%分、攻撃力
50%分回復
60%上昇
60秒
150%
200%
240%
270%
300%
360%
475%
525%

また気になった

数値順としては正しいのだろうが、「インデックス順」というと、なんか違う気がする、orz。
要するに、最初の1文字だけに着目した場合、
・「0」「1」「2」・・・と並び、また「1」が並ぶ

ということで、比較関数は「ハイブリッドな比較」がいいような気がした。
どういうことかというと、
・文字列とか数値とかの概念でくくるのではない
・半角・全角は、時として同一視したほうがみやすい

つづく
https://qiita.com/puyon/items/149c100e85fec842999f

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?