점의 집합 (PointCollection
)이 있다고 가정합시다. 내가 원하는 것은이 포인트들 중에서 X와 Y 좌표의 최소값을 찾는 것입니다. 분명히 컬렉션을 반복하고 좌표를 단계별로 확인할 수 있습니다.PointCollection (C#)의 X 및 Y 좌표의 최소값
더 빠르고 효율적인 솔루션이 있는지 궁금합니다.
의견이 있으십니까?
감사합니다.
점의 집합 (PointCollection
)이 있다고 가정합시다. 내가 원하는 것은이 포인트들 중에서 X와 Y 좌표의 최소값을 찾는 것입니다. 분명히 컬렉션을 반복하고 좌표를 단계별로 확인할 수 있습니다.PointCollection (C#)의 X 및 Y 좌표의 최소값
더 빠르고 효율적인 솔루션이 있는지 궁금합니다.
의견이 있으십니까?
감사합니다.
더 빠르게 입력 하시겠습니까? 아마도 :
var xMin = points.Min(p => p.X);
var yMin = points.Min(p => p.Y);
하지만 그 하나의 foreach
루프보다 느리게 실행됩니다 : 당신이 원하는 경우
var lowestX = pointCollection.Min(p => p.X);
var lowestY = pointCollection.Min(p => p.Y);
를 사용
bool first = true;
foreach(var point in points) {
if(first) {
xMin = point.X;
yMin = point.Y;
first = false;
} else {
if(point.X < xMin) xMin = point.X;
if(point.Y < yMin) yMin = point.Y;
}
}
가장 빠른 솔루션을 찾고 있습니다. 첫 번째 것이 더 느릴 것이라고 생각한 이유는 무엇입니까? – Jamie
또한이 코드는 매번 필요가 없다면이 코드는 xmin과 ymin을 int.MaxValue에 할당 한 다음 foreach를 사용하면 body가 그냥 else 블록이됩니다. –
@HPT - 좋습니다. @Jamie : 왜냐하면 a : it은 한 번이 아닌 두 번 반복되고, b : LINQ는 최소 공통 분모 접근법에서 작동합니다. 컬렉션 유형에 대해 정의 된 사용자 지정 반복자를 사용할 수 없으며 추가 대리자 호출을 수행해야합니다. –
는 별도로 가장 낮은 x와 y 위치를 얻으려면 가장 낮은 결합 된 X 및 Y 위치를 가진 것이 사용
var lowest = pointCollection.Min(p => p.X + p.Y);
'Min'은'Point'가 아닙니다 ... –
Ops. 내 대답에 고정. –
그래서 2 점을 원하십니까? 가장 낮은 X와 가장 낮은 Y 또는 가장 낮은 결합 된 X와 Y를 가진 하나? –
이미 정렬되지 않은 한 모두를 검사하는 것보다 빠릅니다. – smirkingman