Ruby 如何用数组简化哈希求交
我有散列数据(最初是json格式)和一组选定的散列键:Ruby 如何用数组简化哈希求交,ruby,arrays,hash,Ruby,Arrays,Hash,我有散列数据(最初是json格式)和一组选定的散列键: jsondata ='{"1": {"name": "Tax Exempt"}, "2": {"name": "Tax on Purchases"}, "3": {"name": "Tax on Sales"}, "4": {"name": "Service Tax"} }'
jsondata ='{"1":
{"name": "Tax Exempt"},
"2":
{"name": "Tax on Purchases"},
"3":
{"name": "Tax on Sales"},
"4":
{"name": "Service Tax"}
}'
parseddata = JSON.parse(jsondata);
selectedtax = ["2","3"]
我的代码映射键并返回数组中存在的哈希值。代码如下:
selectedtaxdetails = Array.new
parseddata.map do |key,value|
if selectedtax.include? key
selectedtaxdetails << value
end
end
如何改进代码?解决方案:
您可以执行以下操作(rails):
或者更简单(纯红宝石):
说明:
slice
和values\u at
方法都需要一个键列表。如果您只传递一个数组,它将在该数组为键的位置搜索值,这显然不是您想要的。相反,您可以使用splat操作符(*
)。它将接受数组的每个元素,并将其作为单独的参数传递到方法中,这正是我们在这里想要的
更新:
要实现结构:[{“code”:“2”,“name”:“Tax on Purchase”},{“code”:“3”,“name”:“Tax on Sales”}]
您可以执行(rails):
或者使用纯红宝石:
parseddata.values_at(*selectedtax)
parseddata.select{|key,_| selectedtax.include? key}.map {|key, value| value.dup.tap {|h| h['code'] = key}}
解决方案:
您可以执行以下操作(rails):
或者更简单(纯红宝石):
说明:
slice
和values\u at
方法都需要一个键列表。如果您只传递一个数组,它将在该数组为键的位置搜索值,这显然不是您想要的。相反,您可以使用splat操作符(*
)。它将接受数组的每个元素,并将其作为单独的参数传递到方法中,这正是我们在这里想要的
更新:
要实现结构:[{“code”:“2”,“name”:“Tax on Purchase”},{“code”:“3”,“name”:“Tax on Sales”}]
您可以执行(rails):
或者使用纯红宝石:
parseddata.values_at(*selectedtax)
parseddata.select{|key,_| selectedtax.include? key}.map {|key, value| value.dup.tap {|h| h['code'] = key}}
以下内容应在一行中执行相同的操作
parseddaata.values_at(*selectedtax)
以下内容应在一行中执行相同的操作
parseddaata.values_at(*selectedtax)
如果您解释splat运算符的用法,这个答案会更好。@MikeCampbell的+1-在这里。:)谢谢工作完美。还有一个问题,如果我想返回{“代码”:“2”,“名称”:“购买税”},{“代码”:“3”,“名称”:“销售税”}。如何为返回的数组构造新结构?@Axil-这是rails(ActiveSupport core extension)方法,稍后我将使用非rails代码进行更新。:)如果您解释splat运算符的用法,这个答案会更好。@MikeCampbell的+1-在这里。:)谢谢工作完美。还有一个问题,如果我想返回{“代码”:“2”,“名称”:“购买税”},{“代码”:“3”,“名称”:“销售税”}。如何为返回的数组构造新结构?@Axil-这是rails(ActiveSupport core extension)方法,稍后我将使用非rails代码进行更新。:)您应该使用一些下划线:
selected\u tax\u details
更易于阅读您的代码无效。json解析是否与您的问题相关?如果没有,请将其拆下。用Ruby表示散列。只提供相关部分。你怎么了?代码的哪一部分不起作用!我刚刚用ruby运行了这个程序,当然需要“json”,它可以工作。@Axil-您错过了这里的开头引语:selectedtax=[“2”,3”]
您应该使用一些下划线:所选的税务详细信息
更易于阅读。您的代码无效。json解析是否与您的问题相关?如果不相关,请删除它。在Ruby中给出哈希值。只给出相关部分。sawa出了什么问题?代码的哪部分不起作用!我只是在Ruby中运行了这个,当然需要'j'“son”和它的工作原理。@Axil-你错过了这里的一个开场白:selectedtax=[“2”,3”]