C# 显示两个字符串之间的交点
我试图找到两条线的交点。例如,如果字符串一是C# 显示两个字符串之间的交点,c#,string,C#,String,我试图找到两条线的交点。例如,如果字符串一是我的车坏了,字符串二是我的马好了,它将返回我的是。 这是我的代码: public static string intersection2(string x1, string x2) { string[] string1 = x1.Split(' '); string[] string2 = x2.Split(' '); string[] m = string1.Distinct(); string[] n = string2.Distinct
我的车坏了
,字符串二是我的马好了
,它将返回我的是
。
这是我的代码:
public static string intersection2(string x1, string x2)
{
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string[] m = string1.Distinct();
string[] n = string2.Distinct();
string Test;
var results = m.Intersect(n,StringComparer.OrdinalIgnoreCase);
Test = results.ToString();
return Test;
}
但是我得到了错误
System.Linq.Enumerable+d_u92
1[System.String]`。有人能解释一下发生了什么事,以及我如何修复它吗?你的逻辑是正确的,你可以通过修复一点来让它工作
public static string intersection2(string x1, string x2)
{
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
var m = string1.Distinct();
var n = string2.Distinct();
var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
//The result is a list of string, so we just have to concat them
var test = " ";
foreach(var k in results) test += k + " ";
return test;
}
工作小提琴:您没有看到错误-您看到的是
结果类型的完全限定名,即System.Linq.Enumerable+d_921[System.String]
。这是ToString()
的默认行为,除非它在继承类中被重写。看
要显示交叉点的结果,可以使用String.Join
,如下所示:
Test = String.Join(" ", results);
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);
这将产生my is
请注意,您发布的代码不会编译:
string[] m = string1.Distinct();
string[] n = string2.Distinct();
上面生成的行无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string[]”
。添加.ToArray()
是解决此问题的一种方法。完整代码如下:
public static string intersection2(string x1, string x2)
{
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string[] m = string1.Distinct().ToArray();
string[] n = string2.Distinct().ToArray();
string Test;
var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
Test = String.Join(" ", results);
return Test;
}
这基本上是因为您厌倦了获取IEnumerable
的string
表示,这是完全正常的,因为它返回object
类的默认ToString()
。因此,为了解决这个问题,您应该以某种方式创建自己的字符串表示形式,即s.t.,如下所示:
Test = String.Join(" ", results);
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);
还请注意,不需要获取数组的Distinct
结果,因为Intersect
是一个集合操作,自然返回Distict
结果 此程序获取两个字符串的交集(假设允许重复)
公共字符串getcrossion(字符串s1、字符串s2){
字符串common=“”;
对于(int i=0;i
您希望发生什么?你能提供一些示例输入和你想做什么吗?它应该返回两个字符串之间的交集,字符串1:我的车坏了字符串2:我的车vry好结果:我的车ToString()
,对象的默认行为是返回对象的类型名。您需要遍历results
以显示实际结果,或者使用类似String.Join的内容将其连接起来。