可以告诉字符串列表检查重复项吗
本文关键字:检查 列表 字符串 | 更新日期: 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();