Ruby遍历数组同时获取元素ID与完整内容的最优实现方法
问题原因
- 循环值残留:你在循环内使用了实例变量
@id,实例变量的作用域属于当前类实例,每次循环的赋值会覆盖上一次的结果,若外部其他地方调用该变量会拿到最后一轮循环的残留值。 - ID格式错误:无需用
select过滤哈希键,x本身就是存储元素的哈希对象,直接通过键'id'取值就能拿到纯数字结果,原有select+外层套数组的写法才导致输出为数组套哈希的格式。
最简规范实现
@data = [{ 'url' => 'https://zendesk.com/api/v2/macros/1900002708354.json', 'id' => 1_900_002_708_354, 'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{email}} 360081752739' }], 'restriction' => nil }, { 'url' => 'https://zendesk.com/api/v2/macros/360081752739.json', 'id' => 360_081_752_739, 'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{IBAN}} ' }], 'restriction' => nil }, { 'url' => 'https://zendesk.com/api/v2/macros/360081755559.json', 'id' => 360_081_755_559, 'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{email}} 360081752739' }], 'restriction' => nil }] def run_function @data.each do |item| # 用局部变量存储,避免实例变量带来的残留问题 id = item['id'] body = item # 此处可替换为你需要的业务逻辑,以下为测试打印代码 puts "当前ID:#{id}" puts "当前元素内容:#{body}" puts "====================" end end # 调用测试 run_function
如果需要把每次遍历的结果收集起来返回,可以调整为返回数组的写法:
def run_function @data.map do |item| { id: item['id'], body: item } end end
运行后会得到结构为[{id: 数字, body: 元素内容}, ...]的数组,方便后续业务调用。
内容的提问来源于stack exchange,提问作者cbln1
相关产品推荐
相关产品推荐

