gpt4 book ai didi

ruby - 在不覆盖现有值的情况下向现有(哈希)键添加值?

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:45 25 4
gpt4 key购买 nike

简化版:

ar=['name: Joe', 'name: Jack', 'name: Jill']

hash={}

ar.each{|line| if line.include?('name'); hash['name'] = line;end;}

puts hash

我的目标是将数组中的所有元素添加到“名称”键,但我的代码似乎覆盖了现有值。

难道不能将多个值分配给一个键吗?我宁愿不使用数组作为值。

编辑:

我意识到我的第一个例子没有涵盖整个问题:

将数组扩展为: ar=['姓名:乔','姓名: jack ','姓名:吉尔',年龄:29','年龄:32','杂项:好天气']

我想要的是将“名称”分组到键“名称”下,依此类推。

事先不知道属性/键的数量,因此数组将动态设置为顶部。

最佳答案

除了使用数组作为值外别无选择。否则你将如何检索多个值?无论如何,您都需要某种可枚举类型,因此使用数组没有问题。

尝试这样的事情:

hash = {}
ar = ['name: Joe', 'name: Jack', 'name: Jill']

hash['name'] = ar.select {|l| l.include? 'name'}.collect {|l| l.split.last}

hash # => {"name"=>["Joe", "Jack", "Jill"]}

或者,更简单一点:

hash = {"name" => ar.select {|l| l.include? 'name'}.collect {|l| l.split.last} }

对于您编辑的问题:

hash = Hash.new {|h,k| h[k] = [] }
ar.each {|l| k,v = l.split(": "); hash[k] << v }
hash # => {"name"=>["Joe", "Jack", "Jill"], "foo"=>["bar"]}

关于ruby - 在不覆盖现有值的情况下向现有(哈希)键添加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com