【问题标题】:How to define array of hash objects in ruby?如何在 ruby​​ 中定义哈希对象数组?
【发布时间】:2019-04-01 04:14:16
【问题描述】:

有很多答案可以让我们这样实现:

array = [a: 1, b: 2, c: 3]。但我正在寻找更接近 c++ 或 java 实现的东西。

在 C++ 中,我们可以像这样定义一个对数组:

map <pair<int,int>,int> mp;

也许用它来分配值,例如:

mp[{x1,y1}] = 1;

或者像这样检查某些元素是否存在:

while(range(x,y) && !mp[{x,y}]) {
    x += xx;
    y += yy;
    ans++;
 }

现在的问题是,我们如何定义类似于 c++ 的哈希数组,其中我们有如下内容:

 array = [{1,1}: 1, {2,2}: 2, {3,3}: 3]

【问题讨论】:

  • 你的最后一行说明了你想要什么,但不清楚你被赋予了什么来产生它。是a = [1,2,3]吗?请编辑澄清。
  • 是的@CarySwoveland
  • {1,1} 不是有效的 Ruby 对象。你的意思是数组[1,1]
  • 是的,对不起,我会更新我的代码

标签: arrays ruby hash hashmap


【解决方案1】:

在 Ruby 中,地图被称为Hashes。哈希是一个类似于字典的唯一键及其值的集合。 hash的key可以是任意类型:数字、符号、字符串、数组、其他hash等。

所以你可以把它写成一个散列,其中键是数组:

hash = {[1, 1] => 1, [2, 2] => 2, [3, 3] => 3}
# => {[1, 1]=>1, [2, 2]=>2, [3, 3]=>3} 

hash[[2, 2]]
# => 2

hash[[12, 34]] = 55
# => 55 

hash
# => {[1, 1]=>1, [2, 2]=>2, [3, 3]=>3, [12, 34]=>55} 

【讨论】:

    【解决方案2】:
    a = [1, 2, 3]
    
    a.map { |e| { [e,e] => e } }
      #=> [{[1, 1]=>1}, {[2, 2]=>2}, {[3, 3]=>3}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 2015-01-06
      • 2013-10-08
      • 2011-07-25
      • 1970-01-01
      • 2020-03-24
      • 2021-02-05
      • 2010-12-11
      相关资源
      最近更新 更多