计算多个不同的值-Linq

cMi*_*nor 0 c# linq performance

我有一个列表(每个点都有id,x,y,z属性)。

我想获得属性的总不同值x,y,z

我在做:

var points = new List<MyPoint>
{
    new MyPoint {Id = 0, X = 97.5, Y = 92.5, Z = -16.6666660308838},
    new MyPoint {Id = 1, X = 292.5, Y = 92.5, Z = -16.6666660308838},
    new MyPoint {Id = 2, X = 97.5, Y = 277.5, Z = -16.6666660308838},
    new MyPoint {Id = 3, X = 292.5, Y = 277.5, Z = -16.6666660308838},
    new MyPoint {Id = 4, X = 97.5, Y = 462.5, Z = -16.6666660308838},
    new MyPoint {Id = 5, X = 292.5, Y = 462.5, Z = -16.6666660308838},
    new MyPoint {Id = 6, X = 97.5, Y = 92.5, Z = -49.9999980926514},
    new MyPoint {Id = 7, X = 292.5, Y = 92.5, Z = -49.9999980926514},
    new MyPoint {Id = 8, X = 97.5, Y = 277.5, Z = -49.9999980926514},
    new MyPoint {Id = 9, X = 292.5, Y = 277.5, Z = -49.9999980926514},
    new MyPoint {Id = 10, X = 97.5, Y = 462.5, Z = -49.9999980926514},
    new MyPoint {Id = 11, X = 292.5, Y = 462.5, Z = -49.9999980926514},
    new MyPoint {Id = 12, X = 97.5, Y = 92.5, Z = -83.3333320617676},
    new MyPoint {Id = 13, X = 292.5, Y = 92.5, Z = -83.3333320617676},
    new MyPoint {Id = 14, X = 97.5, Y = 277.5, Z = -83.3333320617676},
    new MyPoint {Id = 15, X = 292.5, Y = 277.5, Z = -83.3333320617676},
    new MyPoint {Id = 16, X = 97.5, Y = 462.5, Z = -83.3333320617676},
    new MyPoint {Id = 17, X = 292.5, Y = 462.5, Z = -83.3333320617676}
};
var result =
    points
    .GroupBy(l => l.Id)
    .Select(g => new
    {
        sizeX = g.Select(l => l.X).Distinct().Count(),
        sizeY = g.Select(l => l.Y).Distinct().Count(),
        sizeZ = g.Select(l => l.Z).Distinct().Count()
    });
Run Code Online (Sandbox Code Playgroud)

我得到这个:

在此处输入图片说明

我该如何解决这个问题

X ->2
Y ->3
Z ->3
Run Code Online (Sandbox Code Playgroud)

Bah*_*rom 5

遵循您的需求吗?

var result = new
{
    sizeX = points.Select(l => l.X).Distinct().Count(),
    sizeY = points.Select(l => l.Y).Distinct().Count(),
    sizeZ = points.Select(l => l.Z).Distinct().Count()
};
Run Code Online (Sandbox Code Playgroud)

  • @cMinor不知道您是否听说过“过早的优化是万恶之源”,但我建议您尝试一下并自己衡量速度。LINQ解决方案通常比非LINQ解决方案慢几倍,但是在大多数情况下它们仍然足够快。 (2认同)