我能';我找不到在Ruby中创建简单多维数组或哈希的方法

我能';我找不到在Ruby中创建简单多维数组或哈希的方法,ruby,Ruby,你们红宝石专家会笑的,但我真的很难受。我找了又找,试了很多不同的东西,但似乎没有什么是对的。我想我已经习惯于用js和php处理数组了。这就是我想做的;考虑这个伪代码: i = 0 foreach (items as item) { myarray[i]['title'] = item['title'] myarray[i]['desc'] = item['desc'] i++ } 对,这样我就可以循环遍历myarray,或者通过索引(I)访问'title'和'desc'。世界上最简

你们红宝石专家会笑的,但我真的很难受。我找了又找,试了很多不同的东西,但似乎没有什么是对的。我想我已经习惯于用js和php处理数组了。这就是我想做的;考虑这个伪代码:

i = 0
foreach (items as item) {
  myarray[i]['title'] = item['title']
  myarray[i]['desc'] = item['desc']
  i++
}

对,这样我就可以循环遍历myarray,或者通过索引(I)访问'title'和'desc'。世界上最简单的事情。我已经找到了一些方法让它在Ruby中工作,但它们都非常混乱或混乱。我想知道正确的方法,最干净的方法

我不太清楚您为什么要这样做,因为似乎
已经是一个包含哈希的数组,在我下面的代码中,
myarray
完全相同

尝试使用带有索引的
每个\u,而不是
foreach
循环:

items.each_with_index do |item, index|
  myarray[index] = item
end

如果每个项目中都有额外的属性,例如
id
或其他东西,那么在将项目添加到
myarray

之前,您可能希望删除这些额外属性,除非您实际上正在更新
myu array
(这意味着可能有更好的方法),否则您可能需要使用map来代替:

items = [
  {'title' => 't1', 'desc' => 'd1', 'other' => 'o1'},
  {'title' => 't2', 'desc' => 'd2', 'other' => 'o2'},
  {'title' => 't3', 'desc' => 'd3', 'other' => 'o3'},
]

my_array = items.map do |item|
  {'title' => item['title'], 'desc' => item['desc'] }
end

items    # => [{"title"=>"t1", "desc"=>"d1", "other"=>"o1"}, {"title"=>"t2", "desc"=>"d2", "other"=>"o2"}, {"title"=>"t3", "desc"=>"d3", "other"=>"o3"}]
my_array # => [{"title"=>"t1", "desc"=>"d1"}, {"title"=>"t2", "desc"=>"d2"}, {"title"=>"t3", "desc"=>"d3"}]

看,也许这就是你所期待的。迪特:哦,我明白了,我想那会管用的。非常感谢。编辑前:谢谢,伙计,这很有道理。但是有没有办法为每个索引添加一组键,比如myarray[index]['title']和myarray[index]['desc'],或者我不明白这在Ruby中是如何工作的?如果有办法,如何初始化数组?这一部分也让我难以置信,因为myarray=Array.new似乎还不够。@KeithCollins实际上,你能把你的问题中包含的
items
发布出来吗?我发布的代码现在没有任何作用,我在顶部添加了一条关于它的注释。对,我正在尝试创建一个干净的数组,其中包含一些来自项目的内容,一些来自其他地方的内容。就像你说的,我想我可以从物品中移除我不想要的东西,但是单独移除每一个都会很痛苦。因此,我的首选项仍然是myarray[index]['title']=item['title']等。要过滤项中允许的键,您可以使用
select
方法:
myarray[index]=item.select{key,value |[“title”,“desc”]。include?(key)}
啊,太棒了。这个答案也很有帮助。
titles = ["t1", "t2", "t3"]
 descs = ["d1", "d2", "d3"]

h= Hash.new

titles.each.with_index{ |v,i| h[i] = {title: "#{v}" } }

puts h[0][:title] #=> t1
puts h            #=>  {0=>{:title=>"t1"}, 1=>{:title=>"t2"}...}

descs.each.with_index{ |v,i| h[i] = h[i].merge( {desc: "#{v}" } ) }

puts h[0][:desc] #=> d1
puts h           #=>  {0=>{:title=>"t1", :desc=>"d1"}, 1=>...