62409


あるサイトで以下の様なRubyの練習問題と、その回答が提示されていました。

* * *

**問題**

> まず最初に入力した個数(n)分だけ"アルファベット(空白)数字"という入力を受けます。  
>  その後、n個の "アルファベット,数字" の組を数字の値で並び替え、アルファベットのみ出力する。

**解答**

[code]

    num = gets.chomp.to_i
    array = {}
    
    (1..num).each do
      line = gets.chomp.split(' ')
      array[line[1].to_i] = line[0]
    end
    
    array = array.sort
    # (以下略)
    
[/code]

* * *

この問題に対して、irb上で下記の様に入力を行うと、`array = array.sort`の部分で  
`[[1, "T"], [2, "E"], [5, "B"]]`という結果が得られます。

`array[line[1].to_i] = line[0]`の部分では、例えば`array[1] =
"T"`となるため、`array.sort`を行うと`["T", "E", "B"]`という結果になると考えたのですが、
**なぜ数字とアルファベットが配列として格納される** のでしょうか。

大変見づらい文章となってしまいましたが、ご回答いただけると嬉しいです。

* * *

### 入力例

[code]

    3
    E 2
    T 1
    B 5
    
[/code]

### 出力例

[code]

    T
    E
    B
    
[/code]


CC BY-SA 4.0
2020-01-20T16:19:50.880
62404
2020-01-21T01:25:31.390
2020-06-17T08:14:45.997
-1
question
ruby array
文字列と数字の組のソートについて


`array` はHashです。 `p` を挟んで確認するとわかりやすいと思います。

[code]

    num = gets.chomp.to_i
    array = {}
    
    (1..num).each do
      line = gets.chomp.split(' ')
      array[line[1].to_i] = line[0]
    end
    
    p array.class
    # => Hash
    p array
    # => {2=>"E", 1=>"T", 5=>"B"}
    array = array.sort
    
[/code]

`Hash#sort` の動作は以下の通りなので、キーである数字とそのキーに対応する値であるアルファベットの2つの要素を持つ配列の配列を返します。

> ハッシュを [key, value] を要素とする配列の配列に変換して，それをソートした配列を返します。  
>  <https://docs.ruby-lang.org/ja/latest/method/Hash/i/sort.html>

`Hash#[]=` の動作は以下のドキュメントを確認するといいと思います。  
<https://docs.ruby-lang.org/ja/latest/method/Hash/i/=5b=5d=3d.html>

Hashの場合は配列と違いkeyとvalueの関連付けを行うため、添字として使っている数字と値である文字が組となって格納されています。

>
> ハッシュテーブル(連想配列とも呼ぶ)のクラスです。ハッシュは任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができます。  
>  <https://docs.ruby-lang.org/ja/latest/class/Hash.html>


CC BY-SA 4.0
2020-01-21T01:25:31.390
62409
2020-01-21T01:25:31.390
2599
62404
answer