0

下面的代码获取一些文本,查找逗号,并返回一个没有逗号的拆分版本数组。

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​​ 提供的内置方法来实现拆分。

编辑:我想这是对我原来帖子的编辑。这背后的动机是应用我在阅读红宝石书后发现的知识。

4

4 回答 4

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。哎呀。

于 2013-04-10T04:57:20.773 回答
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
于 2013-04-10T08:07:20.143 回答
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"]
于 2013-04-10T05:01:55.427 回答
0

作为看起来更好的一个小技巧(在我看来),您应该能够在方法末尾跳过“return”这个词,并且您的“seperate_comma_values(text)”可能只是没有括号的“seperate_comma_values text” (在您的文本编辑器中,语法颜色突出显示使这根本不是清晰度问题)

于 2013-04-10T05:07:21.243 回答