优雅,简单的Ruby方式到gsub!/ sub!在输入时,数组/哈希值是否为另一个值?

问题描述 投票:0回答:1

我正在转换输入,理想情况下总是包含以下内容:

本资料由(上市公司) “Name of a company in Chinese characters“公司提供

到现在为止,我有以下内容:

input = gets

input.gsub!(/(本資料由\(上市公司\))(.{1,10})(公司提供)/)  {"
The following information has been provided by: #{$2}\n"}

Company_making_the_Announcement = /(The following information has been provided by: )(.+)/.match(input)

if Company_making_the_Announcement[2].match "如興"
input.gsub! Company_making_the_Announcement[2], "Roo Hsing Co., Ltd (TSEC:4414)"

elsif Company_making_the_Announcement[2].match "新潤"
input.gsub! Company_making_the_Announcement[2], "Shin Ruenn development Co., LTD. (GTSM:6186)"

elsif Company_making_the_Announcement[2].match "遠東商銀"
input.gsub! Company_making_the_Announcement[2], "Far Eastern International Bank Ltd. (TSEC:2845)"

end

上面的代码运行得很好,但它有点笨拙,特别是因为公司列表数以千计,随着我添加一家新公司,代码将大大增加。因此我想到了一种更有效,更优雅的方式来做到这一点。我认为使用数组/哈希可能会有所作为,但我没有运气,因为下面的代码会不断返回错误,无论我如何修改它:

companieslist = [{chin: '如興', eng: 'Roo Hsing Co., Ltd (TSEC:4414)' }, {chin: '新潤', eng: 'Shin Ruenn development Co., LTD. (GTSM:6186)' }]

Company_making_the_Announcement = /(The following information has been provided by: )(companieslist[:chin])/.match(input) 

If Company_making_the_Announcement[2].match (companieslist[:chin])
Input.gsub! Company_making_the_Announcement[2], (companieslist[:eng])

end

那么,简而言之,将数组中的值(中文名称)与另一个中的值(英文名称)匹配的有效方法是什么,并在输入中出现时将第一个值替换为第二个值?

非常感谢

arrays ruby hash gsub
1个回答
1
投票

你走在正确的轨道上,只是没有利用哈希。而不是哈希数组,只需使用哈希,中文公司名称为密钥,英文名称为值。

companies = {'如興': 'Roo Hsing Co., Ltd (TSEC:4414)', '新潤': 'Shin Ruenn development Co., LTD. (GTSM:6186)' }

input = "如興 blah blah blah"

companies.each do |k,v|
  input.gsub!("#{k}", "#{v}")
end

puts(input)
# Roo Hsing Co., Ltd (TSEC:4414) blah blah blah

请注意,这假设您要翻译每个中国公司名称的每个实例。如果公司名称重叠,则需要稍微不同的方法。

© www.soinside.com 2019 - 2024. All rights reserved.