我有這個clausule重寫contains()方法C#
if ((line.Contains('%')) || (line.Contains('@')) || (line.Contains("") && (!line.Contains(','))))
,我希望它重寫一個方法,這東陽是太慢了。有任何想法嗎??
我有這個clausule重寫contains()方法C#
if ((line.Contains('%')) || (line.Contains('@')) || (line.Contains("") && (!line.Contains(','))))
,我希望它重寫一個方法,這東陽是太慢了。有任何想法嗎??
兩個其他的答案似乎忽略這樣的事實,即當line
包含%
或@
或當它確實時,原始代碼返回true 不包含包含,
。 (空字符串完全不相關)。
寫這將是正確的方法:
if(line.Intersect("%@").Any() || !line.Contains(","))
或者可能:
char[] includes = { '%', '@' };
char[] excludes = { ',' };
if(line.Intersect(includes).Any() || !line.Intersect(excludes).Any())
或者這樣:
char[] includes = { '%', '@' };
char[] excludes = { ',' };
if(line.IndexOfAny(includes) != -1 || line.IndexOfAny(excludes) == -1)
if(line.Intersect("%@,").Any())
或
if("%@,".Intersect(line).Any())
(倒車參數可以提高性能,這取決於數據的line
類型和匹配字符的百分比。)
+1我一直是忍者'd – phadaphunk 2013-04-22 15:54:28
我只是試圖發佈這個,但是顯然現在使用更快的手指檢測到人! +1 – spender 2013-04-22 15:54:59
不確定這會比他擁有的快。 (雖然我同意它可能不需要)。除非他的意思是打字速度更快。 – 2013-04-22 15:55:43
首先,讓我們簡化整個語句。您可以使用到許多掛鉤:
if (line.Contains('%') || line.Contains('@') || line.Contains("") && !line.Contains(','))
其次,如前所述,line.Contains( 「」)將始終返回true。你錯過了一個空間或其他東西。
最後,搜索一個字符串(或一個字符數組)是爲了快速!整個搜索操作只是彙編級別的一個簡單操作(REP SCASW)。在這種情況下,您必須搜索多個字符,這會導致一個或多個簡單的彙編指令。 C#中的其他語句比較短,但可能不會更快。
搜索字符串內的字符串會稍微慢一點,所以請嘗試刪除Contains(「」)。
其它操作(與LINQ或正則表達式)可能會導致成更:存儲器操作(用於數組,代表,結果類型),更實證分析(字符數組內的多個字符),等等,等等
[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-04-22 15:52:21
'line.Contains(「」)'!? – 2013-04-22 15:52:35
'line.Contains(「」)'將始終返回true。它甚至可以在[documentation](http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx)中這樣說。 – 2013-04-22 15:52:54