首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置少量具有相同值但不同键的散列参数

设置少量具有相同值但不同键的散列参数
EN

Stack Overflow用户
提问于 2013-04-02 04:53:08
回答 6查看 1K关注 0票数 4

我在我的应用程序中有一个构造,我需要这样的散列:

{ 1 => [6,2,2], 2 => [7,4,5], (3..7) => [7,2,1] }

因此,我希望键3、4、5、6和7具有相同的值。

上面的例子肯定不起作用,因为Ruby是智能的,并且按照给定的方式设置散列键:它将range设置为key :),因此我只能在my_hash[(3..7)]my_hash[3]my_hash[4]等为空的情况下访问我的值。

当然,我可以在hash之外有一个检查或构造来做我需要的事情,但是我很好奇是否有可能在hash声明之外不使用任何循环来设置这样的hash?如果不是,什么是最优雅的?谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-02 05:17:08

这有什么特别的问题吗?

代码语言:javascript
运行
复制
myhash = { 1 => [6,2,2], 2 => [7,4,5] }
(3..7).each { |k| myhash[k] = [7,2,1] }
票数 4
EN

Stack Overflow用户

发布于 2013-04-02 05:16:49

您可以将Hash子类化,使其更容易构造这样的散列:

代码语言:javascript
运行
复制
class RangedHash < Hash
  def []=(key, val)
    if key.is_a? Range
      key.each do |k|
        super k, val
      end
    else
      super key, val
    end
  end
end

它的工作原理与普通散列相同,除了使用范围键时,它会在范围内的每一点设置给定值。

代码语言:javascript
运行
复制
irb(main):014:0> h = RangedHash.new
=> {}
irb(main):015:0> h[(1..5)] = 42
=> 42
irb(main):016:0> h[1]
=> 42
irb(main):017:0> h[5]
=> 42
irb(main):018:0> h['hello'] = 24
=> 24
irb(main):019:0> h['hello']
=> 24
票数 5
EN

Stack Overflow用户

发布于 2013-04-02 05:10:20

我不认为有一种方法可以使用文字散列语法来设置多个键,或者不需要一些迭代,但这里有一个使用迭代的简单方法:

代码语言:javascript
运行
复制
irb(main):007:0> h = { 1 => [6,2,2], 2 => [7,4,5] }; (3..7).each {|n| h[n] = [7,2,1]}; h
=> {1=>[6, 2, 2], 2=>[7, 4, 5], 3=>[7, 2, 1], 4=>[7, 2, 1], 5=>[7, 2, 1], 6=>[7, 2, 1], 7=>[7, 2, 1]}

(请注意,后面的; h只是为了上面的显示目的。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15751693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档