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 が提供する組み込みメソッドを使用して分割を実現できることを認識しています。

編集:これは私の元の投稿から編集されたものだと思います。これの背後にある動機は、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」という単語をスキップできるようにする必要があります。 (テキスト エディターでは、構文の色を強調表示することで、これが明確になるという問題はまったくありません)

于 2013-04-10T05:07:21.243 に答える