当前位置:  开发笔记 > 后端 > 正文

如何从Hash键构建新的Ruby数组

如何解决《如何从Hash键构建新的Ruby数组》经验,为你挑选了1个好方法。

我想从具有以下格式的哈希开始构建一个新数组:

HashConst = {[120,240] => 60, [240,480]=> 30} #Constant

我需要构建一个新数组并使用以下格式将值赋值给新常量:

[ [[120,240] ,1], [[240,480], 1] ]

我试过了 :

NewArrayConst = HashConst.keys.each{ |res| [res, 1]}

但我得到了

[ [120,240], [240,480] ]

我找到的唯一解决方案如下:

  tempVar = []
  HashConst.keys.each_with_index{ |res,idx| tempVar [idx] = [res, 1]}
  NewArrayConst = tempVar 

任何人都知道更好的解决方案,并解释为什么我无法得到我期望的输出NewArrayConst = HashConst.keys.each{ |res| [res, 1]}.我正在使用2.2.2-p95

编辑:

正如许多人指出的Hash var名称错误且具有误导性,我已经更新了以避免混淆



1> Wand Maker..:

你需要使用map而不是each.

Array#each方法不会返回块中执行的代码的结果,而是返回each调用的数组,在您的情况下,它是值的值hash.keys.

Array#map 将块返回的值收集到数组中.

hash = {[120,240] => 60, [240,480]=> 30}
p array = hash.keys.map{ |res| [res, 1]}
#=> [[[120, 240], 1], [[240, 480], 1]]

注意:不要为变量命名,Hash因为它已经是Ruby中的一个众所周知的类.hash如果需要,请使用小写.另外,避免使用变量名称的驼峰情况,例如NewArrayConst,Ruby推荐snake_case用于命名变量 - 您可以参考Ruby样式指南了解更多详细信息.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有