下面的代码会获得一些文字,找到逗号,并返回一个没有逗号的拆分版本的数组。
class A
def separate_comma_values(text)
txt_len = text.length
if txt_len == 0
return [""]
end
final = []
sub_arry = ""
for i in (0...txt_len)
ch = text[i]
if ch == ","
final << sub_arry
final << ""
sub = ""
else
sub_arry += ch
end
end
return final
end
end
这是一个示例输入和输出:
s = A.new
print s.separate_comma_values("dh,,,dhhd,jhb")
# => ["dh", "", "dh", "", "dh", "", "dhdhhd", ""]
虽然它做了我想做的事情,但我觉得有些事情是不对的。它只是很脏。
我知道我可以使用ruby提供的内置方法来实现拆分。
编辑:我想这是我原来的帖子编辑的。这背后的动机是应用我在阅读红宝石书后发现的知识。
答案 0 :(得分:1)
Ruby中有一种方法可以满足您的需求。
http://ruby-doc.org/core-2.0/String.html#method-i-split
2.0.0p0 :001 > "dh,,,dhhd,jhb".split(',')
=> ["dh", "", "", "dhhd", "jhb"]
因此,您的代码最终可能会像
一样简单def separate_comma_values(text)
text.split(',')
end
更新:抱歉,我错过了您提及的split
部分。糟糕。
答案 1 :(得分:0)
这有点干净,虽然正如@depa所指出的那样,如果你试图基于逗号进行拆分,那么有一种更简单的方法,而你的(以及这个)代码也无法正常工作。
class A
def separate_comma_values(text)
return [""] if text.empty?
final = []
sub_arry = ""
text.each_char do |ch|
if ch == ","
final << sub_arry
final << ""
else
sub_arry += ch
end
end
return final
end
end
s = A.new
print s.separate_comma_values("dh,,,dhhd,jhb")
puts
此输出
["dh", "", "dh", "", "dh", "", "dhdhhd", ""]
就像你一样。
以下是我实现算法的方法:
class A
def separate_comma_values(text)
return [""] if text.empty?
array = []
value = ""
text.each_char do |c|
if c == ","
array << value
value = ""
else
value += c
end
end
array << value if !value.empty?
array
end
end
s = A.new
print s.separate_comma_values("dh,,,dhhd,jhb")
puts
此输出
["dh", "", "", "dhhd", "jhb"]
答案 2 :(得分:0)
就像一个看起来更好的小技巧(在我看来),你应该能够跳过方法末尾的'return'这个词,你的'seperate_comma_values(text)'可能只是'seperate_comma_values text'没有parens(在你的文本编辑器中,语法颜色突出显示使这根本不是一个明确的问题)
答案 3 :(得分:0)
显然,重构代码的唯一正确方法是使用String#split
。
虽然,只是为了好玩:
def separate_comma_values(text)
text.each_char.reduce(['']) do |splitted, char|
if char == ','
splitted << ''
else
splitted.last << char
end
next splitted
end
end