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
需要为生成的数组的每个元素从源字符串分配和复制内存。