使用散列,

我想创建一个散列(字典)就像这样:dic = {2 => "ABC", 3 => "DEF"}。在python中,代码如下所示:


text = "abcdef"  


for letter in text.lower():

    for group, number in dic.items(): 

        if letter in group:

对于文本中的每个字母,代码会在字典中查找相同的字母。如何在红宝石中做到这一点?有任何想法吗?


哈士奇WWW
浏览 183回答 3
3回答

梦里花落0921

这是您的代码的直接翻译(顺便说一句,它与您的描述不匹配):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)  endend--output:--111222但是,这就是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  endendp new_hash--output:--{"a"=>1, "b"=>1, "c"=>1, "d"=>2, "e"=>2, "f"=>2}使用该代码,您遍历散列一次即可创建新的散列,并且后续的散列查找非常有效。使用原始代码,您可以遍历字符串中每个字母的整个哈希值。

白板的微信

test = "abcdef"dic = {2 => "ABC", 3 => "DEF"}test.each_char { |s|    dic.each { |key, val|        puts key if val.include?(s.upcase)              }}是你的意思吗?

宝慕林4294392

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个333似乎您想要一个不区分大小写的搜索,因此我同时调用upcase了这两个数据源。如果text保证小写或哈希值保证大写,则可以删除其中之一。与现有答案相比,它的一个好处是它仅进行搜索,直到找到匹配的值为止,我认为这就是您想要的。nil如果找不到匹配的值,则返回搜索。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python