我的情况是需要验证两个同名代表的比较。例如 让我们说 1 的名字被重新描述为
Person1Name = Venkata Phani Kumar Parimi
让我们说同一个人的名字 2 被重新描述为
Person2Name = Kumar Parimi Venkata Phani
还有一个场景是
John F. Kennedy = John Fitzgerald Kennedy
与以下情况相比,上述优先级更高。
John F. Kennedy = John Kennedy
即使在两个不同的上下文中,上述两个人也会向同一个人提供帮助。
如果有使用C#进行比较和确认姓名属于同一个人的方式,请告诉我
答案 0 :(得分:0)
这是一个特定于上下文的问题,所以我认为你需要解决它。首先,实际上使两个名字相等?它是否以任何顺序包含相同的名称?那就是你需要检测的东西。可以有缩写吗?可以有像“太太”这样的头衔吗?如果有连字符的双重名称,会发生什么?我认为你的例子没有详细描述你所遇到的问题。在任何人为您提供算法之前,您需要提供更多相同且不相等的名称示例,以及为什么这些名称相等。
即。
John F. Kennedy = John Fitzgerald Kennedy?
先生。约翰肯尼迪=约翰肯尼迪?
如果你看一下不同的拼写,情况会变得更糟。
YayaTouré= Toure Yaya?
有了这些问题,问题很快变得非常复杂。如果你只需要比较两组相等而你可以忽略拼写,缩写,标题等,那么只需检查设置的交集。在c#-like伪代码
string[] names1 = name1.ToLowerInvariant().Split(' ');
string[] names2 = name2.ToLowerInvariant().Split(' ');
if (names1.Length != names2.Length)
return false; // unequal, different number of names
foreach(name in names1)
if (!names2.Contains(name))
return false; // unequal, missing name
return true; // equal
答案 1 :(得分:0)
尝试使用SequenceEqual
这正是它的工作:
string s = "Subba Cargos";
string s2 = "Cargos Subba";
var isSame= s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).
OrderBy(o => o).SequenceEqual(s2.Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries).
OrderBy(o => o));
答案 2 :(得分:0)
或者如果你喜欢简洁:
var person1name = "Venkata Phani Kumar Parimi";
var person2name = "Kumar Parimi Venkata Phani";
var match = person1name.Split().All(p => person2name.Split().Contains(p))