我的代码将文本作为输入,将其拆分为单个字符,然后返回一个数组,其中单词被分组,非单词字符是单独的项目。 第一个变种:
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"]
工作正常。或者我需要重构我的迭代器代码并花一些时间来获得“清晰”的结果而不是紧凑的。 实际上,我不想花时间在那上面。但是我的紧凑型方法是否会导致一些错误或意外输出?我已经测试了一段时间并且没有发现任何事情。 但你会建议什么?这个小巧的伎俩很脏,真的不好吗?
答案 0 :(得分:0)
所有compact
都会删除数组中的nils。如果您确定不希望阵列中存在nils,那么应该没有任何问题。