2014-03-30 46 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(); 
    } 
相关问题