如何按条件合并两个字符串数组哈希?求Ruby简洁实现方式
嘿,太懂你想要Ruby式简洁解决哈希合并的心情了!不用循环,用原生方法就能搞定,给你整理几种最实用的方式:
Ruby 简洁合并哈希的几种方案
1. 最通用:Hash#merge方法
这是Ruby处理哈希合并的标准操作,默认会用后面哈希的键值覆盖前面的重复键:
hash1 = { name: "Alice", age: 25 } hash2 = { age: 26, city: "Paris" } merged_hash = hash1.merge(hash2) # 结果: { name: "Alice", age: 26, city: "Paris" }
要是不想覆盖旧值,还能传个块自定义重复键的处理逻辑:
merged_hash = hash1.merge(hash2) { |key, old_val, new_val| old_val } # 结果: { name: "Alice", age: 25, city: "Paris" }
2. 原地合并:Hash#merge!
如果不需要保留原哈希,想直接修改第一个哈希的内容,用带感叹号的版本更高效:
hash1 = { name: "Alice", age: 25 } hash2 = { age: 26, city: "Paris" } hash1.merge!(hash2) # 此时hash1直接变成: { name: "Alice", age: 26, city: "Paris" }
3. Ruby 3.0+ 专属:Hash#|操作符
哦对了!Ruby 3.0之后终于给哈希也加了类似数组的|操作符,作用是返回两个哈希的并集,重复键默认取后面哈希的值,和merge效果一致:
hash1 = { name: "Alice", age: 25 } hash2 = { age: 26, city: "Paris" } merged_hash = hash1 | hash2 # 结果: { name: "Alice", age: 26, city: "Paris" }
要是你之前尝试这个操作失败,大概率是Ruby版本低于3.0,先跑ruby -v确认下版本哦!
4. 非空哈希合并的小细节
哪怕其中一个哈希是空的,这些方法也完全能正常工作,空哈希不会对合并结果产生任何影响:
empty_hash = {} user_hash = { name: "Bob" } empty_hash.merge(user_hash) # => { name: "Bob" } user_hash | empty_hash # => { name: "Bob" }
这些都是纯Ruby原生的简洁写法,完全不用手动写循环,应该能完美解决你的需求!
内容的提问来源于stack exchange,提问作者Pedro Gabriel Lima
相关产品推荐
相关产品推荐

