如何从List<string>中删除相同的项?

4

每次运行带有特定值的SQL查询时,我从数据库中选择用户并选择一个用户,因此无法在SQL中限制相同的用户。

我有一个列表:

list[0] = "jerry"
list[1] = "tom"
list[2] = "jerry"

我希望从列表中删除任何一个(首尾无所谓)。

谢谢

5个回答

22
IEnumerable<string> uniqueUsers = list.Distinct();

你也可以使用 HashSet:

HashSet<string> uniqueUsers = new HashSet<string>(list);

15

LINQ可以解决这个问题:

List<string> names = new List<string> { "Tom", "Jerry", "Tom" };
IQueryable<string> distinctItems = names.Distinct();
如果你想要一个列表类型,只需调用ToList():
distinctItems.ToList();

以下是来自MSDN的示例。

编辑:非LINQ示例(使用List类中的Contains()函数):

List<string> names = new List<string> { "Tom", "Jerry", "Tom" };
List<string> distinctNames = new List<string>();
foreach (var name in names)
{
    if (!distinctNames.Contains(name))
    {
        distinctNames.Add(name);
    }
}

没有LINQ?使用传统的搜索和删除方法。 - Nayan
1
请参考 @lee 的答案,他使用了 HashSet 而不是 LINQ。 - Alex McBride
@Fara,我看到了你的回答,确实是最好和最有创意的答案,但是@Secret Agent Man的回答更符合我的需求,因为我没有在问题中提供所有信息。 - eugeneK

6
您可以使用Distinct() LINQ扩展功能。
var list = new List<string> { "Tom", "Jerry", "Tom" };

var uniqueList = list.Distinct();

2
使用建议中提到的Distinct方法将保留原始列表并返回一个包含列表不同项的单独的IEnumerable<>序列。
另一种选择是直接从原始列表中去除重复项,使用RemoveAll方法:
var temp = new HashSet<string>();
yourList.RemoveAll(x => !temp.Add(x));

1

你可以使用 list.distinct();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接