🐈

PythonとJavaScriptでsortする際に複数の項目で並び替える時の違い

2025/01/31に公開

例えば
['Hiroshi','Kenji','Masahiro','Yutaka','Shigeru','Kazuo','Noboru','Satoshi','Yoshio']
のような配列があった場合に、文字の長さで並び替えることを最優先し、
その後アルファベットの並び替えは降順で文字を並び替えたい場合に、PythonJavaScript の記述の違いを記述する。

Python の場合、

lst = ['Hiroshi','Kenji','Masahiro','Yutaka','Shigeru','Kazuo','Noboru','Satoshi','Yoshio']
print(sorted(lst,key=lambda s:(len(s),s),reverse=True))

上記のように記述すると、lambda式の ()の中で先に記述したものが優先的にソートされる。

JavaScript の場合

const lst = ['Hiroshi','Kenji','Masahiro','Yutaka','Shigeru','Kazuo','Noboru','Satoshi','Yoshio']
console.log([...lst].sort((a,b) => b.length - a.length || b.localeCompare(a)))

と記述できる。

Python の方は頻繁に使う書き方ではあるが、JavaScriptで || を使うことで先に記述した
b.length - a.length の方を優先的に記述できるのは便利な記述だと思った。

b.localeCompare(a)b > a でも同じ結果が得られるようになるが、
localeCompareを使った方がコードの可読性が増すのでこちらで記述するのがbetter。

Discussion