我是在 codewars 接受培训的新手,我在这个 RLE 问题中找不到我的错误,这里是说明:
您的任务是编写这样的游程编码。对于给定的字符串,返回对(或数组)[ (i1, s1), (i2, s2), ..., (in, sn) ] 的列表(或数组),以便可以通过复制来重建原始字符串字符 sx ix 次并连接所有这些字符串。您的行程编码应该是最小的,即。对于所有 i,值 si 和 si+1 应该不同。
例子
>rle("hello world!")
# => [[1,'h'],[1,'e'],[2,'l'],[1,'o'],[1,' '],[1,'w'],[1,'o'],[1,'r'],[1,'l'],[1,'d'],[1,'!']]
>rle("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb")
# => [[34,'a'], [3,'b']]
这是我的代码:
def rle(str)
result=[[]]
str.to_s.split.each do |word| #"Hello World"->["Hello","World!"]-->"Hello", "World!"
new_word_count=[[]]
word.each_char do |char| #"H","e","l"...
new_char=true
new_word_count.map! do |find|
if find[1]==char
find[0]+=1
new_char=false
break
end
end
if new_char==true
new_word_count<<[1,'char']
end
end
result+=new_word_count
end
result
end
我收到此错误:
`block (3 levels) in rle': undefined method `[]' for nil:NilClass (NoMethodError)
from `map!'
from `block (2 levels) in rle'
from `each_char'
from `block in rle'
from `each'
from `rle'
from `
'
运行长度编码 (RLE) 是一种非常简单的数据压缩形式,其中数据运行(即在许多连续数据元素中出现相同数据值的序列)存储为单个数据值和计数,而不是作为原始运行。维基百科