从C#列表中获取仅出现一次的值

3
我有一个关于C# int-List的问题。 例如,我在列表中有7个值(12, 65, 312, 52, 312, 85, 14)。这些值可能会出现多次(在这种情况下是值为312)。
首先,我使用'list.Sort()'对列表进行排序。 然后我的目标是获得一个新的列表,其中仅存在每个值一次。在这种情况下,新列表将是(12, 14, 52, 65, 85)
我不明白如何做到这一点。
3个回答

11

我会使用 Linq...

var newList = new List<int>() { 12, 65, 312, 52, 312, 85, 14 }
            .GroupBy(x => x)
            .Where(x => x.Count() == 1)
            .Select(x => x.Key)
            .ToList();

如果这是 OP 想要的新列表,您仍然需要对值进行排序。 - sstan
非常完美,非常感谢!还有一种可能性,我只能保存更常出现的值吗? - xileb0
@xileb0,你说的“更频繁出现”的意思是什么? - Eser
例如在这种情况下,列表中应该只有312这个数字。因为它是唯一一个不是“single”的数字。 - xileb0
1
@xileb0,你可以使用不同的条件,比如 .Where(x => x.Count() > 1) - Eser

2
这应该可以解决问题:
var intList = new List<int>() { 12, 65, 312, 52, 312, 85, 14 };
var filtered = intList.Where(x => intList.Count(z => z == x) == 1).OrderBy(x => x);

foreach(int i in filtered)
{
    Console.WriteLine(i);   
}

DotNetFiddle


0

只是一些额外的信息,我正在寻找相同的解决方案。但是我想查询一个对象集合的一个属性(文件名)...并将正确的对象返回到列表中...

queryDatabase.GroupBy(x => x.Filename).Where(x => x.Count() == 1).Select(x => x.FirstOrDefault()).ToList();

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