我試圖從一個字串的串列中找到所有可能的前綴。我們可以把前綴中的"/"或": "去掉,使之更易讀。
input = ["item1"/span>, "item2"/span>, "product1", "product2", " variant: 123", "variant: 789"]
預期輸出
item
產品
變體
uj5u.com熱心網友回復:
這里的關鍵是要找到你的分隔符。看起來你的定界符是數字和:以及/。所以你應該能夠通過陣列進行映射,在regex中使用分隔符來回傳前綴。你也可以選擇檢查它是否存在于陣列中(所以你真正知道它是一個前綴),但我沒有把它包括在我的答案中。
input = ["item1"/span>, "item2"/span>, "product1", "product2", " variant: 123", "variant: 789"]
prefixes = input.map {|word| word.gsub(/:?/? [0-9]/, ''/span>)}.uniq
=> [" item", "product", "variant"]
你的定界符越多,你就可以把它附加到regex模式上。請閱讀一下這里關于通配符的內容 :-)
希望這能回答你的問題!
。uj5u.com熱心網友回復:
我認為回傳的前綴的順序是不重要的。此外,我還忽略了對"/"和":"字符的處理,因為那是直接的,是對中心問題的干擾。
讓我們首先創建一個輔助方法,其唯一的引數是一個以相同字母開頭的單詞陣列。
def longest_prefix(arr)<
a0, *a = arr
return a0 if a0.size == 1 || arr.size ==1
n = (1...a0.size-1).find do |i|
c = a0[i]
a.any? { |w| w[i] != c }
end
n.nil? ? a0 : a0[0,n]
end?
例如,
arr = ["dog1"/span>, "doggie"/span>, "dog2"/span>, "doggy"/span>]
最長的前綴 arr
#=> "dog"。
我們現在只需要按照單詞的第一個字母進行分組,然后將產生的鍵值對映射到輔助方法的回傳值,當其引數等于鍵值對的值時。
def prefixes(arr)
arr.group_by { |w| w[0] }.map { |_,a| longest_prefix(a) }
end>
例如,假設
arr = ["dog1"/span>, "eagles", "eagle", "doggie", "dog2", "catsup",
"cats", "elephant", "cat", "doggy", "corstic"]
然后
前綴 arr
#=> ["dog", "e", "ca"]/span>
注意,
arr.group_by { |w| w[0] }
#=> { "d"=> ["dog1", "doggie", "dog2", "doggy"],
# "e"=>["eagles", "eagle", "elephant"],
# "c"=>["catsup", "cats", "cat", "caustic" ] }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323824.html
標籤:
