簡體   English   中英

檢查字符串是否在數組中重復的最快方法[暫停]

[英]The fastest way to check whether string is duplicated in a array [on hold]

現在我有一個項目需要檢查一個字符串是否在數組中重復(數組中大約有十萬個字符串)。

我需要在一秒鍾內完成它。

雖然它不僅是由軟件決定的,也是由硬件決定的。 我必須使用軟件的最快方式。

我的朋友告訴我使用dictionary ,使用 long as 鍵並使用ContainsValue來檢查是否重復。

我不知道這種方式是否正確,或者有更好的方法來實現這一點。 你能幫幫我嗎? 謝謝你。

——————————————————

此外,字符串未排序,長度相同,與隨機數/字符組合,就像 GUID 一樣。

它用於工廠檢查產品的QRCode(每個產品都有不同的QRCode)。 二維碼是否重復然后發出警報。

產品在產品線中運行。 當產品通過掃描儀時,我的程序將從掃描儀獲取字符串並檢查它是否從其他產品重復。

這是字符串的示例:
201410080000100217700531,Onion_potato_chips,(2011)190172110,英格蘭

每個產品都有不同的代碼意味着每個洋蔥薯片 package 有不同的代碼,但並非所有的洋蔥薯片 package 都有相同的代碼。

考慮到數組的大小,這是一個很高的要求。

使用字典的問題在於,當您向其中添加元素時,字典會定期填滿並且必須重新散列。 這需要時間。 此外,通常字符串的 hash function 會查看字符串中的所有字符,這可能不是最佳的(取決於您的字符串)。

我建議改為使用 Array.Sort 方法,然后遍歷排序數組以將每個字符串與前一個字符串進行比較,看看它是否相同。 失敗的字符串比較通常不必查看整個字符串。

如果您想進一步加快速度,您可以嘗試跟蹤前一個字符串與之前的字符串不同的第一個索引,並使用該索引作為起點(之前和之后)查找不同字符之間的當前字符串和前一個字符串。 鑒於字符串將按排序順序排列,例如“The”、“The”、“The quick”、“Under”等,這種啟發式方法可能會有所幫助。這是否值得取決於您使用字符串的頻率其他字符串的前綴。

另一個速度優化可能是下拉到#unsafe 代碼,因為這將消除對數組和字符串的邊界檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM