2013-03-14 49 views
-1

我刚学红宝石和想转换下面的函数从PHPPHP红宝石strtr函数的效率和的preg_replace

function stringToDigits($str) 
{ $str = strtolower($str); 
    $from = 'abcdefghijklmnopqrstuvwxyz'; 
    $to = '22233344455566677778889999'; 
    return preg_replace('/[^0-9]/', '', strtr($str, $from, $to)); 
} 

我不解释正确早些时候道歉红宝石。这是我的第一个问题....

我有转换成红宝石的问题。这是我做的

class String 
    def str_to_digits str 
     str = str.downcase 
     from = 'abcdefghijklmnopqrstuvwxyz' 
     to = '22233344455566677778889999' 
     self.gsub('/[^0-9]', '') 
     # here I am having problem to translate the whole string 'str' from 'from' to 'to' 
     # I dont know how to write it in ruby 
    end 
end 
+3

而你的问题是什么?你已经说了你想要达到的目标,但不是你尝试过的以及你卡在哪里。 – IMSoP 2013-03-14 21:37:11

+0

我们希望您能够展示您所做的努力来解决问题。 – 2013-03-14 21:40:07

+1

**向我们展示您到目前为止所尝试的内容。**不要描述它,而是编辑问题并粘贴到实际代码中。然后告诉我们什么没有工作。当你尝试时发生了什么?你得到不正确的结果了吗?你有没有得到结果?如果结果不正确,是什么使它们不正确?你想要什么呢?你有没有得到任何正确的结果?如果是这样,他们是什么?不要让我们猜测。 – 2013-03-14 21:42:50

回答

0

您可以使用String#tr(from, to)
文档:http://ruby-doc.org/core-2.0/String.html#method-i-tr

但是,您正在为字符串创建一个实例方法。你会这样称呼它:

"examplestring".str_to_digits("second examplestring") 

但是,你只需要一个字符串,所以你有三种选择:

class String 
    FROM = 'abcdefghijklmnopqrstuvwxyz' 
    TO = '22233344455566677778889999' 

    def instance_str_to_digits 
    return self.downcase.gsub(/\d/, '').tr(FROM, TO) 
    end 

    def destructive_instance_str_to_digits! 
    self.downcase! 
    self.gsub!(/\d/, '') 
    self.tr!(FROM, TO) 
    end 

    def self.class_str_to_digits(str) 
    return str.downcase.gsub(/\d/, '').tr(FROM, TO) 
    end 
end 

# calling the methods: 
str = "examplestring" 
result_1 = str.instance_str_to_digits 
result_2 = String.class_str_to_digits(str) 
str.destructive_instance_str_to_digits! # result overrides str 
+0

非常感谢您的帮助 – user2171714 2013-03-15 23:18:36