0

「学生証」、「名前」、「住所」、「スコア」、「バッジID」などの項目のリストがあります。この既存のリストから別のキーを使用してハッシュテーブルを作成するにはどうすればよいですか(元のリストを別の変数名で保持します)?

私が試してみました

new_school=Hash.new(old_school)  // ruby

しかし、バッジIDフィールドをハッシュの新しいキーとして割り当てる方法がわかりません。

事前に助けてくれてありがとう

4

2 に答える 2

1

ActiveSupport gemを使用して、配列(またはその他の列挙可能なオブジェクト)をハッシュに変換できます。

objects.index_by do |object|
  <code to calculate the hash key>
end

objects.group_by do |object|
  <code to calculate the hash key>
end

#index_byメソッドは、リストからハッシュの個々のオブジェクトの値を作成し、#group_byメソッドは、ハッシュの値を、そのハッシュキーにマップされるオブジェクトの配列にします。

ハッシュキーを計算するコードは、各オブジェクトの属性を参照するのと同じくらい簡単です。

于 2012-04-17T20:21:44.303 に答える
1

また、オブジェクトの値の配列を取得してハッシュに変換することを意味する場合があることに注意してください。このような:

[123, 'Jim Bob', '123 Fake St', 90, 321]

これに:

{:student_id => 123,
  :name => 'Jim Bob',
  :address => '123 Fake St',
  :score => 90,
  :badge_id => 321}

もしそうなら、あなたはこれを行うことができます:

keys = [:student_id, :name, :address, :score, :badge_id]
values = [123, 'Jim Bob', '123 Fake St', 90, 321]
Hash[*keys.zip(values).flatten]
于 2012-04-17T20:25:26.893 に答える