是否有一个哈希实现,不记得键值?我必须做一个巨大的哈希,但我不在乎键是什么。
编辑:
Ruby的哈希实现存储了键的值。我想哈希不记得密钥的值。它只是使用哈希函数来存储您的值并忘记密钥。这样做的原因是我需要为大约5 GB的数据创建一个哈希值,并且在创建它之后我不关心键值是什么。我只希望能够根据其他键查找值。
修改编辑:
语言有点令人困惑。按键的值我的意思是:
hsh ['value'] =数据
在散列函数将数据存储在散列中之后,我不关心'value'是什么。
编辑^ 3:
好的,这就是我正在做的事情:我正在为一组多个基因生成每个35个字母(核苷酸)的kmer。每个基因都有一个ID。哈希看起来像这样:
kmers = { 'A...G' => [1, 5, 3], 'G...T' => [4, 9, 9, 3] }
所以哈希键是kmer,值是一个包含具有该kmer的基因/字符串的ID的数组。
我在另一个数据集中查询kmers的哈希,以快速找到匹配的基因。我不关心哈希键是什么,我只需要从kmer获取数字数组。
>> kmers['A...G']
=> [1, 5, 3]
>> kmers.keys.first
=> "Sorry Dave, I can't do that"
答案 0 :(得分:4)
我想你想要一个 set ,虽然它存储了唯一的密钥而没有值。它具有来自散列的快速查找时间。 Set包含在标准库中。
require 'set'
s = Set.new
s << 'aaa'
p s.merge(['ccc', 'ddd']) #=> #<Set: {"aaa", "ccc", "ddd"}>
答案 1 :(得分:2)
即使有一个奇怪的哈希刚刚记录存在(这是我理解这个问题)你可能也不想使用它,因为内置哈希会更简单,更快,不需要宝石,等等......只需设置......
h[k] = k
......并称之为一天......
答案 2 :(得分:1)
我假设5 gb的字符串是基因组,而kmers是35个碱基对的核苷酸序列。
我可能做的(稍微简化)是:
human_genome = File.read("human_genome.txt")
human_kmers = Set.new
human_genome.each_cons(35) do |potential_kmer|
human_kmers << potential_kmer unless human_kmers.include?(potential_kmer)
end
unknown_gene = File.read("unknown_gene.txt")
related_to_humans = unknown_gene.each_cons(35).any? do |unknown_gene_kmer|
human_kmers.include?(unknown_gene_kmer)
end
答案 3 :(得分:0)
我必须做一个巨大的哈希,但我不在乎键是什么。
这称为数组。只需使用一个数组。没有键的哈希根本不是哈希值,而是丢失了它的值。如果您不需要键值查找,那么您不需要哈希值。
答案 4 :(得分:0)
使用数组。数组通过整数而不是键来索引。 http://www.ruby-doc.org/core/classes/Array.html
a = []
a << "hello"
puts a #=> ["hello"]