これ*は「splat オペレーター」と呼ばれます。技術的な定義を提供できるかどうかはわかりませんが (Google の助けを借りればすぐに見つけられると思いますが)、基本的に複数の手書きの代わりになるということです。コード内のコンマ区切り値。
これをより具体的にするためHash[]に、例で使用したケースを考えてみましょう。Hashクラスには、可変数の[]引数を取り、通常は次のように呼び出すことができるクラス メソッドがあります。
# Returns { "foo" => 1, "bar" => 2 }
h = Hash["foo", 1, "bar", 2]
それが配列でもハッシュでも、私が渡したものでもないことに注意してください。これは (手書きの) 一連の値です。演算子を使用すると、配列を使用して基本的に同じことを実現できます。*あなたの場合は、によって返されたものmovie_popularity.sort_by{|m,p| p}.reverse.flattenです。
そのflatten呼び出しsort_byについて: ハッシュを呼び出すと、列挙を提供するEnumerableさまざまなクラス (特にArrayと) に含まれているモジュールを実際に活用しています。Hashハッシュの場合、次のように反復する代わりに、おそらく気づいたことでしょう。
hash.each { |value| ... }
代わりにこれを行います:
hash.each { |key, value| ... }
つまり、ハッシュを反復すると、各反復で2 つの値が得られます。したがって、sort_by独自の呼び出しは一連のペアを返します。flattenこの結果を呼び出すと、次のようにペアが 1 次元の値のシーケンスに折りたたまれます。
# Returns [1, 2, 3, 4]
[[1, 2], [3, 4]].flatten