簡體   English   中英

Ruby-如何將數組添加到哈希鍵?

[英]Ruby - how to add an array to a hash key?

我有這個循環:

car_data = Hash.new
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end

我有這個偵聽器,試圖將所有新車保存到car_data['NEW'] ,但是此代碼僅在哈希中保留一項(應該為8)。

我還嘗試將car_data['NEW']定義為數組:

car_data = Hash.new
car_data['NEW'] = Hash.new
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end

但是結果是一樣的-僅一項。 如何將整個數組保存到哈希鍵元素?

謝謝。

您寫道,您試圖將car_data['NEW']定義(初始化)為數組,但是您所做的是...將其初始化為哈希。

更改:

car_data['NEW'] = Hash.new

至:

car_data['NEW'] = []

完整的代碼如下所示:

car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end

car_data['NEW']必須聲明為Array

car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end

您也可以一步一步完成

car_data = { new: [] }
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data[:new] << c.id if c.new == 1
end

坦白說,以這種方式使用Hash對我來說似乎有些奇怪。 特別是,在Hash中混合不同種類的信息是從其他非面向對象的語言繼承的非常糟糕的方法。

我至少要使用兩個單獨的變量。 但是我對上下文了解不足,無法提供有意義的示例。

car_data = Car.all.each_with_object(Hash.new { |h, k| h[k] = [] }) do |c, memo|
  memo[c.brand] = c.id
  memo['NEW'] << c.id if c.new == 1
end

或者,更簡單地說,讓我們根據需要即時創建它:

car_data = Car.all.each_with_object({}) do |c, memo|
  memo[c.brand] = c.id
  (memo['NEW'] ||= []) << c.id if c.new == 1
end

如果在任何情況下都存在NEW密鑰,也請參考下面@tadman的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM