我有一个List,每次sql查询以某个值运行时我都会从db中选择用户,并在当时选择一个用户,因此我无法限制sql中的相同用户。
我有以下列表:
list[0] = "jerry"
list[1] = "tom"
list[2] = "jerry"
我希望从列表中删除任何(在我的情况下,第一个或最后一个并不重要)。
由于
答案 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();