设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2374|回复: 7
打印 上一主题 下一主题

[question] Addition of hash(Ruby)[finish]

[复制链接]

ACG宅

梦石
0
星屑
72
在线时间
413 小时
注册时间
2008-10-1
帖子
5595

开拓者贵宾

跳转到指定楼层
1
发表于 2011-7-30 20:08:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 忧雪の伤 于 2012-1-24 19:15 编辑

标题

添加一个哈希相加的方法。(Ruby)



描述

如题所见,提个醒,是要增加方法,不要实例操作……



要求

提供异常报告解决方案,对于相同的key就取自身的。



参考答案
游客,如果您要查看本帖隐藏内容请回复


display line
此号诞生于公元2008年10月1日。
此号消失于公元2012年10月1日。
4年的经历,4年的守望。现在只剩下66RPG的名字和当年的“梦想世界,在你手中。”这一句话。

老黄鸡

梦石
0
星屑
42394
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

2
发表于 2011-7-30 22:11:09 | 只看该作者
本帖最后由 fux2 于 2011-7-30 23:45 编辑
  1. class Hash
  2.   def +(exhash)
  3.     return unless exhash.is_a?(Hash)
  4.     shash = self.dup
  5.     exhash.each_key {|k| shash[k]||=exhash[k]}
  6.     shash
  7.   end
  8. end
复制代码

评分

参与人数 1星屑 +200 收起 理由
忧雪の伤 + 200 正确答案。

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-7-30 22:14:56 | 只看该作者
本帖最后由 忧雪の伤 于 2011-7-30 22:17 编辑
fux2 发表于 2011-7-30 22:11

提供异常报告解决方案

=> false
对于相同的key就取自身的

=> false
other : 那个,直接赋值岂不是指针相同。

点评

表示不明何为异常报告解决方案  发表于 2011-7-30 22:33
回复 支持 反对

使用道具 举报

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

4
发表于 2011-7-30 22:25:16 | 只看该作者
本帖最后由 px.凤翔九天 于 2011-7-31 19:20 编辑
  1. h1,h2={1=>2,3=>4},{5=>6,7=>8}
  2. def hash_add(hash1,hash2)
  3.   unless hash1.is_a?(Hash) and hash2.is_a?(Hash)
  4.     return "这货不是Hash,拉出去处理了!"
  5.   end
  6.   hash3={}
  7.   hash1.each{|key,value| key_add,value_add=key,value
  8.   hash2.each{|key2,value2|
  9.   key_add+=key2 unless key2==key
  10.   value_add+=value2 unless value2==value
  11.   }
  12.   hash3[key_add]=value_add}
  13.   return hash3
  14. end
  15. p hash_add(h1,h2)
复制代码
貌似
提供异常报告解决方案
贯彻不够......不过结果应该对吧.....
P.S. 对于没有定义在Hash中表示悔改......

0.0这个加法吗....................囧,彻底理解错了嗷..............

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

老黄鸡

梦石
0
星屑
42394
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

5
发表于 2011-7-30 22:26:57 | 只看该作者
忧雪の伤 发表于 2011-7-30 22:14
=> false

=> false

你没试过就知道:对于相同的key就取自身的 == false?

点评

看到了,但是其他问题呢。  发表于 2011-7-30 22:32
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

ACG宅

梦石
0
星屑
72
在线时间
413 小时
注册时间
2008-10-1
帖子
5595

开拓者贵宾

6
 楼主| 发表于 2011-7-30 22:47:38 | 只看该作者
本帖最后由 忧雪の伤 于 2011-7-31 14:37 编辑

最初的思路是:先将hash表B进行迭代,然后输入到A里面,最后判断A里面是否有相同的,如果有就删除重复的。
但是后来发现不知道怎么输入到A里面。。。接着查镐头书的时候查到了“merge!”方法。它简直就是为这个问题量身打造的,merge!的定义:合并A与B两个数组,最后删除重复的。

有点不服气的感觉啊。。。毕竟是直接查到了方法- -

另外因为小LOLI不让给实例。。。所以就拿a = hash.new意思了一下。。。本来是有非常有趣的hash表的。。。TAT

我有此次事件知道了。。。必须多写代码。。。多熟悉方法啊。。。这玩意不懂方法没法做啊。。。

  1. a = {}
  2. b = {}
  3. a['q'] = 1
  4. a['w'] = 2
  5. b['e'] = 3
  6. b['q'] = 1
  7. begin
  8.   a.merge!(b)
  9.   print a
  10. rescue TypeError
  11.   print "Error for hash type"
  12. end
复制代码
写过了版本。。。真心表示很蛋疼。。。很纠结。。。
最后在月妹妹的帮助下。。。帮我在我的错误版本的基础上修改了下。。。虽然不能算是自己做的。。。但是也算是长知识了。。。

  1. a = {'q'=>1,'w'=>2,'e'=>3}
  2. b = {'w'=>2,'r'=>4,'t'=>5}
  3. c = {}
  4. class Hash
  5.   def hashadd(h1,h2)
  6.     raise TypeError  unless h1.is_a?(Hash) and h2.is_a?(Hash)
  7.     h = {}
  8.     h1.each {
  9.         | key,value |
  10.         h[key] = value unless h.has_key?(key)
  11.     }
  12.     h2.each {
  13.         | key,value |
  14.         h[key] = value unless h.has_key?(key)
  15.     }
  16.     return h
  17.    end
  18.   end
  19. c = c.hashadd(a,b)
  20. p c
复制代码

点评

因为没弄清楚hash的定义- -  发表于 2011-7-31 13:58
于是乎有这么复杂么囧。  发表于 2011-7-31 12:09
额。。。没看到。。。这帖子小LOLI编辑过了。。。我记忆中的题就是相加然后去除重复的。。。  发表于 2011-7-30 23:00
你不是自己说的“为Hash类添加一个方法”么……这算作弊么?  发表于 2011-7-30 22:55
此号诞生于公元2008年10月1日。
此号消失于公元2012年10月1日。
4年的经历,4年的守望。现在只剩下66RPG的名字和当年的“梦想世界,在你手中。”这一句话。
回复 支持 反对

使用道具 举报

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

7
发表于 2011-7-31 09:44:43 | 只看该作者
之前的方法跟fux给撞上了……所以换了种,不过慢了许多~
  1. class Hash
  2.         def hplus( hash )
  3.                 raise TypeError unless hash.is_a?( Hash )
  4.                 nhash = {}
  5.                 keys  = self.keys | hash.keys
  6.                 keys.each do |k|
  7.                         nhash[k] = self[k] || hash[k]
  8.                 end
  9.                 return nhash
  10.         end
  11. end
复制代码
测试代码:
  1. # test
  2. # except { 1=>2, 2=>4, 3=>4, 5=>6, 7=>8}

  3. a = {1=>2, 3=>4, 5=>6}
  4. b = {1=>3, 2=>4, 3=>4, 7=>8}
  5. puts a.hplus(b)
  6. #=> {1=>2, 3=>4, 5=>6, 2=>4, 7=>8}
复制代码
Benchmark跑10,000次a.hplus(b)。
  1. Rehearsal ------------------------------------
  2.    0.156000   0.016000   0.172000 (  0.171875)
  3. --------------------------- total: 0.172000sec

  4.        user     system      total        real
  5.    0.188000   0.000000   0.188000 (  0.203125)
复制代码

点评

嘛,总算是一个理解到题意的了。  发表于 2011-7-31 12:09

评分

参与人数 1星屑 +200 收起 理由
忧雪の伤 + 200 正确答案。

查看全部评分


See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

8
发表于 2011-7-31 10:16:30 | 只看该作者
本帖最后由 退屈£无聊 于 2011-7-31 10:19 编辑
  1. class Hash
  2.   def add(new)
  3.     return unless new.is_a?(hash)
  4.     new.each_key do |key|
  5.       unless self[key].nil?
  6.         #self[key] = [self[key], new[key]]
  7.       else
  8.         self[key] = new[key]
  9.       end
  10.     end
  11.     return self
  12.   end
  13. end
复制代码

点评

指针问题。  发表于 2011-7-31 12:08
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 05:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表