可以告诉字符串列表检查重复项吗

本文关键字:检查 列表 字符串 | 更新日期: 2023-09-27 18:29:38

List是否有一个属性或机制,我可以通过它来防止重复的条目被添加到其中,还是每次都必须在列表中搜索它?

IOW,只去会好得多:

List<String> AAppsToDisplay = new List<String>();
AAppsToDisplay.DuplicatesAllowed = false;
...
while (odr.Read()) 
{
  AAppsToDisplay.Add(odr.GetString(0)); 
}

而不是必须这样做:

List<String> AAppsToDisplay = new List<String>();
. . .
String s = String.Empty;
while (odr.Read()) 
{
  s = odr.GetString(0);
  if (! AAppsToDisplay.Contains(s))
  {
    AAppsToDisplay.Add(s);  
  }
}

可以告诉字符串列表检查重复项吗

请为作业使用更合适的工具HashSet<string>

var hashset = new HashSet<string>();
// in loop
hashset.Add(value);

如果在HashSet上使用Contains,它将是比在List<string>上使用它更优化的解决方案,特别是在该集变得特别大的情况下。但是,如果在您的业务需求中允许静默地丢弃重复项,那么您不需要这样做。Add方法返回一个布尔值,指示是否添加了该值。复制品永远不会进入场景。


需要注意的是,HashSet<T>并不是为了保留插入顺序而记录的。您可能按照相同的插入顺序观察结果,这可能会受到您的特定用法的影响,但您不应该依赖它。

您可以使用List类的扩展方法:

public static class StringListExtensions {
    public static bool AddIfNotPresent(this List<string> list, string newString) {
        if (!list.Contains(newString)) {
            this.Add(newString);
            return true;
        }
        return false;
    }
}

您可以使用System.Linq库并进行

List<String> AAppsToDisplay = new List<String>();
...
while (odr.Read()) 
{
  AAppsToDisplay.Add(odr.GetString(0)); 
}
//new code
AAppsToDisplay = AAppsToDisplay.Distinct().ToList();