🐈
PythonとJavaScriptでsortする際に複数の項目で並び替える時の違い
例えば
['Hiroshi','Kenji','Masahiro','Yutaka','Shigeru','Kazuo','Noboru','Satoshi','Yoshio']
のような配列があった場合に、文字の長さで並び替えることを最優先し、
その後アルファベットの並び替えは降順で文字を並び替えたい場合に、Python
と JavaScript
の記述の違いを記述する。
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