将数组拆分为散列

3

I have an array of values. For example:

arr = [
           "1", "customer_one", "down",
           "2", "up",
           "3", "down",
           "4", "customer_two", "up",
           "5", "for_vpn", "down"
         ]

这些值描述了路由器端口的信息。我想获取类似于这样的哈希数组:
[
  {:name=>"1", :description=>"customer_one", :state=>"down"},
  {:name=>"2", :description=>"", :state=>"up"},
  {:name=>"3", :description=>"", :state=>"down"},
  {:name=>"4", :description=>"customer_two", :state=>"up"},
  {:name=>"5", :description=>"for_vpn", :state=>"down"}
]

请注意,在arr[3]arr[4]之间,arr[5]arr[6]之间没有具有描述值的元素,但结果哈希必须包含键描述等于空字符串:description=>""

1
好问题:有趣且陈述清晰。我唯一的建议是微小的改进:消除“.....”,使您拥有完整的工作示例,并格式化“arr”,以便无需水平滚动即可阅读。 - Cary Swoveland
1个回答

4
arr
.slice_before{|e| e !~ /\D/}
.map do
  |name, description = "", state|
  {name: name, description: description, state: state}
end

谢谢,它起作用了。我几乎理解了你的代码的所有行,除了这一行|name, description = "", state|。你可以简短地解释一下map如何使用 slice_before方法中两个元素的默认值吗? - Victor Borshchov
1
@VictorBorshchov 如果参数的数量与参数的个数不匹配,则首先为必需参数指定值。 - Wand Maker
1
slice_before 也接受模式,所以你可以写成 arr.slice_before(/\d/) - Stefan
1
@sawa,难道不应该是“我已经忘记了”吗?我看到你在指责用户缺少标点和语法错误 :-) - Wand Maker
2
...或者是“我忘了。。。”。@Wand,应该是“……和使用不正确的语法”。 - Cary Swoveland
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接