Tag: 密钥

在Ruby中获取用于哈希中的键的特定对象的便捷方式?

这是一个有趣的一个,我在一个桶分片系统中有一个场景,我正在编写我维护索引哈希和存储哈希的地方,相互关系是一个UUID生成,因为这是分布式的,我希望有一些信心,新的桶获得独特的引用。 在本练习的早期,我开始优化代码以冻结SecureRandom.uuid生成的所有密钥(它会生成字符串),因为当您使用字符串作为哈希中的密钥时,会被欺骗并自动冻结以确保无法更改。 (如果它是一个字符串而不是冻结的)。 在大多数情况下,很容易积极地执行此操作,特别是对于新的UUID(实际上在我的项目中,许多此类值需要这种处理)但在某些情况下,我发现我必须接近通过网络传递的值的哈希值然后获取,为了确保一致地使用任何作为键的字符串,使用相当钝的查找机制。 我的目标是,因为我希望这能够在多个节点上维护一个庞大的数据集,以尽可能地减少密钥和索引存储的开销,并且因为它是一个存储系统,所以可以多次引用相同的UUID,因此它是有助于使用相同的参考。 这里有一些代码以简单(ish)forms演示了这个问题。 我只想询问是否有更优化和方便的机制来获取具有相同字符串值的键的任何预先存在的对象引用(对于键名而不是关联的值)。 # Demonstrate the issue.. require ‘securerandom’ index = Hash.new store = Hash.new key = ‘meh’ value = 1 uuid = SecureRandom.uuid puts “Ruby dups and freezes strings if used for keys in hashes” puts “This produces different IDs” store[uuid] = value index[key] = uuid store.each_key { |x| puts […]

保留从Ruby中的文件加载YAML的关键顺序

我想保留从磁盘加载的YAML文件中的键的顺序,以某种方式处理并写回磁盘。 这是在Ruby中加载YAML的基本示例(v1.8.7): require ‘yaml’ configuration = nil File.open(‘configuration.yaml’, ‘r’) do |file| configuration = YAML::load(file) # at this point configuration is a hash with keys in an undefined order end # process configuration in some way File.open(‘output.yaml’, ‘w+’) do |file| YAML::dump(configuration, file) end 不幸的是,一旦构建了哈希,这将破坏configuration.yaml键的顺序。 我找不到控制YAML::load()使用什么数据结构的方法,例如alib的orderedmap 。 我没有运气在网上寻找解决方案。

Ruby:Hash.keys和Hash.values方法返回的键/值的顺序是什么?

是否将项目添加到哈希的顺序相同?

如何合并两个哈希没有新的键

我怎么能合并两个哈希导致没有新的密钥,这意味着合并会合并两个哈希中存在的密钥? 例如,我想要以下内容: h = {:foo => “bar”} j = {:foo => “baz”, :extra => “value”} puts h.merge(j) # {:foo => “baz”} 我正在寻找一种非常干净的方法,因为我当前的实现非常混乱。

如何在Ruby中创建一个比较字符串的哈希值,忽略大小写?

在Ruby中,我想在Hash中存储一些东西,但我不希望它区分大小写。 例如: h = Hash.new h[“HELLO”] = 7 puts h[“hello”] 这应该输出7,即使情况不同。 我可以覆盖哈希的等价方法或类似的东西吗? 谢谢。

带有重复键的Ruby Hash?

是否可以在Ruby中创建允许重复键的哈希? 我在Ruby 1.9.2工作。