检查列表中是否存在多个不同的字符串

时间:2014-05-31 19:35:55

标签: c# vb.net

如何在名为Person的对象中打印出与Name属性不同的所有名称?我有一个Person对象列表

Person.Name
Nick
Brit
BLANK
Nick
BLANK
Dog
Cat

我想输出所有不同的名字,不包括空字符串

Nick
Brit
Dog
Cat

4 个答案:

答案 0 :(得分:3)

你可以用LINQ做得非常好:

List<string> distinctNames = people.Select(p => p.Name)
                                   .Where(n => !String.IsNullOrEmpty(n))
                                   .Distinct()
                                   .ToList();

答案 1 :(得分:1)

我不确定您的代码或程序的外观,但为了在人员列表中获取所有不同的名称,您首先必须将每个单独的名称添加到列表中,然后选择所有不同的名称。

这应该可以解决问题:

var names = new List<string>();

foreach(var person in persons)
{
 if (!string.IsNullOrEmpty(person.Name))
 {
  names.Add(person.Name);
 }

}

var distinctNames = names.Distinct();

答案 2 :(得分:1)

您可以使用HashSet来跟踪遇到的名称 - 如下所示:

HashSet<string> nameSet = new HashSet<string>();

List<Person> persons = getPersonList(); // get the list somehow

foreach (Person p in persons) {
  string name = p.Name;
  if (!string.IsNullOrEmpty(name)) {
    if (!nameSet.Contains(name)) {
      nameSet.Add(name);
    }
  }
}

List<string> names = nameSet.ToArray();
foreach (string name in names) {
  Console.WriteLine(name);
}

编辑:将其称为&#34; C#2.0版本。&#34; LINQ答案更优雅。

答案 3 :(得分:1)

您也可以使用LINQ

完成此操作
var DistinctNames = persons.Where(w => !String.IsNullOrEmpty(w.Name)).Select(s => s.Name).Distinct();

这将为您提供IEnumberable字符串。如果要在控制台窗口中打印出来,可以使用

persons.Where(w => !String.IsNullOrEmpty(w.Name)).Select(s => s.Name).Distinct().ToList().ForEach(f => Console.WriteLine(f.Name));

这会使用List ForEach,这不是最佳做法,具体取决于您的要求,但这只是简单的一行来做一件简单的事情。