2014-03-05 105 views
0

我有一个函数将数字数组解析为正确的电话号码格式的字符串。有没有什么办法来压缩这个,所以我只需要调用.insert一次?使用.insert与红宝石阵列

createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) returns "(123) 456-7890") 

def createPhoneNumber(numbers) 
    numbers.insert(6, "-") 
    numbers.insert(0, "(") 
    numbers.insert(4, ")") 
    numbers.insert(5, " ") 
    numbers.join 
end 
+0

这事,如果你有国际用户即会打破,因为世界各地的电话号码长度和格式各不相同。另外,方法名不是camelCase,它们是Ruby中的snake_case,所以使用'create_phone_number'。 –

回答

2
def createPhoneNumber(numbers) 
    "(#{numbers[0..2].join}) #{numbers[3..5].join}-#{numbers[6..9].join}" 
end 

没有办法,我能想到的,你会用insert,并用它只有一次。

3

如果你不介意传递10个字符的字符串,而不是,你可以做

def createPhoneNumber(p) 
    '(%s) %s-%s' % [p[0,3],p[3,3],p[6,4]]  
end 

例子:

createPhoneNumber('1234567890') # => "(123) 456-7890" 
+0

使用字符串是正确的开始方式。我们经常在美国以“(xxx)xxx-xxxx”格式看到它们,但在其他地方它们会有所不同。即使假设他们是十位数字也是危险的,所以OP将他们的应用程序绘制成以美国为中心的角落。 –