2014-03-30 47 views
0

我正在開發一個需要一些字符串操作的項目,我需要一些幫助。我怎樣才能找到兩個字符串之間的交叉點,字符明智的基數?

說我有兩個字符串:

string1 = "1 2 3 4 5"; 
string2 = "1 2 4 6 7"; 

這其實是大多數弦我會看起來像一起工作是。

我想知道什麼是聰明的,現代的方法,如果有的話,要找到這種類型的字符串之間的交叉數,東西idealy這樣的:

//a way to create GetCardinal is what I am looking for  
int cardinal = GetCardinal(string1, string2); 
//Cardinal should be 3 as the intersection is "1 2 4" 

我主要興趣的方法這對string1和string2類型的輸入非常有用,意思是用空格分隔的數字序列

不使用int列表的原因是因爲字符串是輸出值,我也期待一些字符輸出。

謝謝 西普里安

回答

1

你必須用空格分開它們,然後你可以使用Intersect + Count

int cardinal = string1.Split().Intersect(string2.Split()).Count(); 
+0

我總是忘記'Split()'被空間分割... – MarcinJuraszek

+0

謝謝,這個想法工作得很好 – ciprianr

1

String.SplitString.Join和LINQ(Intersect)的一點點的將做的工作:

var result = String.Join(" ", string1.Split(' ').Intersect(string2.Split(' '))); 

如果你只需要在路口元素的個數,使用Count

var cardinal = string1.Split(' ').Intersect(string2.Split(' ')).Count(); 
+0

簡潔! :)但使用String.Split是昂貴的。更多的perfomant實現將使用狀態機來讀取輸入字符串。 – Dai

+0

@Dai爲什麼你認爲'String.Split'很貴? – MarcinJuraszek

+0

'String.Split'需要爲生成的數組的每個元素分配和複製源字符串中的內存。 – Dai

0

您可以使用字符串加上一些LINQ的

int GetCardinal(string s1, string s2) 
    { 
     return s1.Split(' ').Intersect(s2.Split(' ')).Count(); 
    } 

的分裂功能,或者你可以有多個空格或製表符:

int GetCardinal(string s1, string s2) 
    { 
     char []separators = new char[] { ' ', '\t' }; 
     return s1.Split(separators, StringSplitOptions.RemoveEmptyEntries).Intersect(s2.Split(separators, StringSplitOptions.RemoveEmptyEntries)).Count(); 
    } 
相關問題