显示两个字符串之间的交集
Showing the intersection between two strings
我试图找到两个字符串之间的交集。例如,如果字符串一是 my car is bad
,而字符串二是 my horse is good
,它将 return my is
。
这是我的代码:
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__92
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;
}
工作fiddle:https://dotnetfiddle.net/joO0d9
您没有看到错误 - 您看到的是 result
类型的完全限定名称,即 System.Linq.Enumerable+d_921[System.String]
。这是 ToString()
的默认行为,除非它在继承 class 中被覆盖。参见 Object.ToString()。
要显示交集的结果,可以使用String.Join
,像这样:
Test = String.Join(" ", results);
这会产生 my is
。
请注意,您发布的代码无法编译:
string[] m = string1.Distinct();
string[] n = string2.Distinct();
以上几行生成了一个Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<string>' to '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>
的 string
表示,这是完全正常的,因为它 returns 是 [=14= 的默认 ToString()
] class。因此,为了解决这个问题,您应该以某种方式创建自己的字符串表示形式,即 s.t。像这样:
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);
另请注意,无需获取数组的 Distinct
结果,因为 Intersect
是一个集合操作,自然 returns Distict
结果!
此程序获取 2 个字符串的交集(假设允许重复)
public String getIntersection(String s1, String s2) {
String common = "";
for (int i = 0; i < s1.length(); i++) {
for (int j = 0; j < s2.length(); j++) {
if (s1.length() == 0 || s1.length() == 0)
return common;
if (s1.charAt(i) == s2.charAt(j)) {
common = common + s1.charAt(i);
// delete character from each if there is a match
s1 = s1.substring(0, i) + s1.substring(i + 1);
s2 = s2.substring(0, j) + s2.substring(j + 1);
i = -1;
break;
}
}
}
return common;
}
我试图找到两个字符串之间的交集。例如,如果字符串一是 my car is bad
,而字符串二是 my horse is good
,它将 return my is
。
这是我的代码:
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__92
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;
}
工作fiddle:https://dotnetfiddle.net/joO0d9
您没有看到错误 - 您看到的是 result
类型的完全限定名称,即 System.Linq.Enumerable+d_921[System.String]
。这是 ToString()
的默认行为,除非它在继承 class 中被覆盖。参见 Object.ToString()。
要显示交集的结果,可以使用String.Join
,像这样:
Test = String.Join(" ", results);
这会产生 my is
。
请注意,您发布的代码无法编译:
string[] m = string1.Distinct();
string[] n = string2.Distinct();
以上几行生成了一个Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<string>' to '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>
的 string
表示,这是完全正常的,因为它 returns 是 [=14= 的默认 ToString()
] class。因此,为了解决这个问题,您应该以某种方式创建自己的字符串表示形式,即 s.t。像这样:
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);
另请注意,无需获取数组的 Distinct
结果,因为 Intersect
是一个集合操作,自然 returns Distict
结果!
此程序获取 2 个字符串的交集(假设允许重复)
public String getIntersection(String s1, String s2) {
String common = "";
for (int i = 0; i < s1.length(); i++) {
for (int j = 0; j < s2.length(); j++) {
if (s1.length() == 0 || s1.length() == 0)
return common;
if (s1.charAt(i) == s2.charAt(j)) {
common = common + s1.charAt(i);
// delete character from each if there is a match
s1 = s1.substring(0, i) + s1.substring(i + 1);
s2 = s2.substring(0, j) + s2.substring(j + 1);
i = -1;
break;
}
}
}
return common;
}