使用“紧凑” - 可能的问题

时间:2013-04-16 13:29:02

标签: ruby

我的代码将文本作为输入,将其拆分为单个字符,然后返回一个数组,其中单词被分组,非单词字符是单独的项目。 第一个变种:

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

当输入一个接一个地包含非字符时,它也会导致数组中的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"]

工作正常。或者我需要重构我的迭代器代码并花一些时间来获得“清晰”的结果而不是紧凑的。 实际上,我不想花时间在那上面。但是我的紧凑型方法是否会导致一些错误或意外输出?我已经测试了一段时间并且没有发现任何事情。 但你会建议什么?这个小巧的伎俩很脏,真的不好吗?

1 个答案:

答案 0 :(得分:0)

所有compact都会删除数组中的nils。如果您确定不希望阵列中存在nils,那么应该没有任何问题。