我想创建一个哈希(字典),如下所示:dic = {2 => "ABC", 3 => "DEF"}
。在python中,代码如下所示:
text = "abcdef"
for letter in text.lower():
for group, number in dic.items():
if letter in group:
对于text de code中的每个字母,在字典中查找相同的字母。我怎么能用红宝石做到这一点?有什么想法吗?
答案 0 :(得分:2)
以下是您的代码的直接翻译(顺便提一下,与您的描述不符):
hash = {
"abc" => 1,
"def" => 2,
}
str = "abcdef"
str.downcase.each_char do |char|
hash.each_pair do |key, val|
puts val if key.include?(char)
end
end
--output:--
1
1
1
2
2
2
然而,那是O(n ^ 2),这意味着它效率低下。你可能最好不要构造一个更好的哈希:
hash = {
"abc" => 1,
"def" => 2,
}
new_hash = {}
hash.each_pair do |key, val|
key.each_char do |char|
new_hash[char] = val
end
end
p new_hash
--output:--
{"a"=>1, "b"=>1, "c"=>1, "d"=>2, "e"=>2, "f"=>2}
使用该代码,您可以遍历哈希一次以创建新哈希,并且后续哈希查找非常有效。使用原始代码,您可以遍历字符串中每个字母的整个哈希值。
答案 1 :(得分:0)
test = "abcdef"
dic = {2 => "ABC", 3 => "DEF"}
test.each_char { |s|
dic.each { |key, val|
puts key if val.include?(s.upcase)
}
}
这是你的意思吗?
答案 2 :(得分:0)
text = "abcdef"
hash = {2 => "ABC", 3 => "DEF"}
text.upcase.each_char do |c|
puts hash.keys.find{|k| hash[k].include?(c.upcase)}
end
输出:
2 2 2 3 3 3
您似乎想要一个不区分大小写的搜索,因此我在两个数据源上调用upcase
。如果保证text
为小写,或者保证Hash值为大写,则可以删除其中一个。这比现有答案的一个好处是它只搜索到找到匹配值,我认为这是你想要的。如果找不到匹配的值,搜索将返回nil
。