0

私のコードは、テキストを入力として受け取り、それを 1 文字に分割してから、単語がグループ化され、単語以外の文字が個別の項目である配列を返します。最初のバリアント:

def make_array(text)
  @raw_array=text.split(//)
  @result_array=[]
k=0
for i in 0...@raw_array.length
if @raw_array[i]=~/[\W]/
@result_array[k+1]=@raw_array[i]
k+=2
else
@result_array[k]='' if @result_array[k]==nil
@result_array[k]=@result_array[k]+@raw_array[i]
end
end
  print @result_array.inspect
end

入力に非文字が 1 つずつ含まれている場合、配列内の nil 項目も発生します

make_array("TEST TEST TEST TEST")#=>["TEST", " ", "TEST", " ", "TEST", " ", "TEST"]
make_array("TEST,,, TEST TEST TEST")#=>["TEST", ",", nil, ",", nil, ",", nil, ...]

コンパクトな方法を使用するだけで、

make_array("TEST,,, TEST TEST TEST")#=>["TEST", ",", ",", ",", " ", "TEST", " ", "TEST", " ", "TEST"]

正常に動作します。または、イテレータ コードをリファクタリングして時間をかけて、圧縮せずに「明確な」結果を得る必要があります。本当は、そんなことに時間をかけたくないのです。しかし、コンパクトを使用した私のアプローチは、エラーや予期しない出力を引き起こす可能性がありますか? しばらくテストしましたが、何も気づきませんでした。しかし、あなたは何をアドバイスしますか?そのコンパクトなトリックは汚れていて、本当に良くないですか?

4

1 に答える 1

0

compact配列から nil を削除するだけです。配列に nil を入れたくない場合は、問題はないはずです。

于 2013-04-16T13:38:59.020 に答える