我想分析一些文檔並在其中找到相似之處。經過分析,我有一個數組,其中的元素是來自被認爲相似的文件的數據數組。但有時我有兩個幾乎相似的元素,當然我想離開其中最大的元素。爲了簡化:移除數組數組中相似數組的有效方法
data = [[1,2,3,4,5,6], [7,8,9,10], [1,2,3,5,6]...]
如何有效地處理我得到的數據:
data = [[1,2,3,4,5,6], [7,8,9,10]...]
我想我可以相交每個數組,如果相交的陣列相匹配的原始陣列中的一個 - 我不理它。這是我寫的一個快速代碼:
data = [[1,2,3,4,5,6], [7,8,9,10], [1,2,3,5,6], [7,9,10]]
cleaned = []
data.each_index do |i|
similar = false
data.each_index do |j|
if i == j
next
elsif data[i]&data[j] == data[i]
similar = true
break
end
end
unless similar
cleaned << data[i]
end
end
puts cleaned.inspect
這是一種有效的方式嗎?此外,當前的行爲只允許離開了那幾個元素短數組,如果他們出現,我可能要合併相似矩陣:
[[1,2,3,4,5], [1,3,4,5,6]] => [[1,2,3,4,5,6]]
問題的最後一部分要求您定義「足夠類似於合併」 - 例如,在合併之前有多少元素(或它們的比例)需要匹配? –
@NeilSlater,它還沒有想過它,並沒有分析太多的數據,看看這種情況發生的頻率。從一批文件中,我注意到兩個相似的數據陣列,它們有一個元素([same_stuff,x],[same_stuff,y])不同,我想這個差別可能會稍微大一些。 – Vilmar
-1問題沒有明確定義。 – sawa