Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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比较不同表示形式的人名#_C# - Fatal编程技术网

C# 如何使用C比较不同表示形式的人名#

C# 如何使用C比较不同表示形式的人名#,c#,C#,我有一个场景,需要验证相同名称的两个表示的比较。例如 假设人名1表示为 Person1Name=Venkata Phani Kumar Parimi 假设同一个人的名字2表示为 Person2Name=Kumar Parimi Venkata Phani 还有一种情况是 约翰·肯尼迪=约翰·菲茨杰拉德·肯尼迪 与以下情况相比,上述情况具有更高的优先级 约翰·肯尼迪=约翰·肯尼迪 即使在两种不同的语境中,上述两个人也指同一个人 请告诉我是否有一种方法可以使用C#来比较和确认姓名属于同一个人这是一个

我有一个场景,需要验证相同名称的两个表示的比较。例如 假设人名1表示为

Person1Name=Venkata Phani Kumar Parimi

假设同一个人的名字2表示为

Person2Name=Kumar Parimi Venkata Phani

还有一种情况是

约翰·肯尼迪=约翰·菲茨杰拉德·肯尼迪

与以下情况相比,上述情况具有更高的优先级

约翰·肯尼迪=约翰·肯尼迪

即使在两种不同的语境中,上述两个人也指同一个人


请告诉我是否有一种方法可以使用C#来比较和确认姓名属于同一个人

这是一个非常特定于上下文的问题,因此我认为您需要解决这个问题。首先,究竟是什么使两个名字相等?它是否以任何顺序包含相同的名称?那么这就是你需要检测的。有缩写吗?可以有“夫人”这样的头衔吗?如果有带连字符的双重名称,会发生什么?我认为你的例子没有足够详细地描述你的问题。在任何人向您提供算法之前,您需要提供更多相等和不相等名称的示例,以及这些名称相等的原因

i、 e

约翰·肯尼迪=约翰·菲茨杰拉德·肯尼迪

约翰·肯尼迪先生=约翰·肯尼迪

如果你看不同的拼写,情况会更糟

雅雅旅游=雅雅旅游

有了这些问题,问题很快变得非常复杂。如果您只需要比较两个集合是否相等,并且可以忽略拼写、缩写、标题等,则只需检查集合的交点即可。在类c伪代码中

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

 

尝试使用
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));

或者如果你喜欢简洁:

        var person1name = "Venkata Phani Kumar Parimi";
        var person2name = "Kumar Parimi Venkata Phani";

        var match = person1name.Split().All(p => person2name.Split().Contains(p))

你可能需要对这个问题有一个更好的定义。两个名字可以指不同的人,即使名字是相同的。@ PooG:我不是在这个时间点考虑这个问题。@丹尼拉·怀特:我试图用列表来实现这一点,这是一个很糟糕的选择,也错过了新添加的ScEnRio…@ PhanikuMARPV。但我的观点是:如何定义两个名字指同一个人的测试?在回答您的问题时,最重要的问题是定义规定比较逻辑的规则。我们不能为你这样做,因为我们不知道更大的背景。一旦定义了规则,编写代码很可能是微不足道的,但这是我们可以帮助的。感谢您为我指出遗漏的场景。用场景信息更新了Q。