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

时间:2010-10-04 10:24:25

标签: c# asp.net

我有一个List,每次sql查询以某个值运行时我都会从db中选择用户,并在当时选择一个用户,因此我无法限制sql中的相同用户。

我有以下列表:

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

我希望从列表中删除任何(在我的情况下,第一个或最后一个并不重要)。

由于

5 个答案:

答案 0 :(得分:22)

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

您也可以使用HashSet:

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

答案 1 :(得分:15)

LINQ可以解决这个问题:

List<string> names = new List<string> { "Tom", "Jerry", "Tom" };
IQueryable<string> distinctItems = names.Distinct();

如果您想要列表类型,只需调用ToList():

distinctItems.ToList();

以下是MSDN的示例。

编辑:非LINQ示例(使用List class中的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);
    }
}

答案 2 :(得分:6)

您可以使用Distinct()LINQ扩展名。

var list = new List<string> { "Tom", "Jerry", "Tom" };

var uniqueList = list.Distinct();

答案 3 :(得分:2)

按照其他答案中的建议,使用Distinct会保留原始列表,并返回单独的IEnumerable<>序列,其中包含列表中的不同项目。

另一种方法是使用RemoveAll直接删除原始列表中的重复项:

var temp = new HashSet<string>();
yourList.RemoveAll(x => !temp.Add(x));

答案 4 :(得分:1)

您可以使用list.distinct();