Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在两个字符串之间找到相交的基数(按字符计算)?_C#_String - Fatal编程技术网

C# 如何在两个字符串之间找到相交的基数(按字符计算)?

C# 如何在两个字符串之间找到相交的基数(按字符计算)?,c#,string,C#,String,我正在做一个需要一些字符串操作的项目,我需要一些帮助 假设我有两个字符串: string1 = "1 2 3 4 5"; string2 = "1 2 4 6 7"; 这实际上是我将要处理的大多数字符串的样子 我想知道什么是一种智能的、现代的方法,如果有的话,可以找到这种类型的字符串之间的交集数,理想情况下是这样的: //a way to create GetCardinal is what I am looking for int cardinal = GetCardinal(st

我正在做一个需要一些字符串操作的项目,我需要一些帮助

假设我有两个字符串:

string1 = "1 2 3 4 5";
string2 = "1 2 4 6 7";
这实际上是我将要处理的大多数字符串的样子

我想知道什么是一种智能的、现代的方法,如果有的话,可以找到这种类型的字符串之间的交集数,理想情况下是这样的:

//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列表的原因是因为字符串是输出值,我也希望有一些字符输出

谢谢,,
Ciprian

String.Split
String.Join
和一点LINQ(
Intersect
)将完成以下任务:

var result = String.Join(" ", string1.Split(' ').Intersect(string2.Split(' ')));
如果您只需要交叉点中的元素数量,请使用
Count

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

您必须用空格分隔它们,然后可以使用+
Count

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

您可以使用string加上一些Linq的split函数

    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();
    }

简洁!:)但是使用String.Split很昂贵。性能更好的实现将使用状态机读取输入字符串。@Dai您为什么认为
String.Split
很昂贵?
String.Split
需要为生成的数组的每个元素从源字符串分配和复制内存。