문제

다음과 같은 방법이 있습니다.

AverageAndDoSomeMath (Point2)

처리 방법이 궁금합니다.

AverageAndDoSomeMath (Point2) // single
AverageAndDoSomeMath (Point2 collection) // multiple

단일 구현을 사용하는 것이 바람직합니다.

컬렉션의 경우 IEnumerable 유형을 사용하여 모든 종류의 컬렉션을 전달할 계획이지만, 단일 값의 경우 컬렉션 자체는 다른 목적으로 사용되지 않기 때문에 이를 래핑하여 컬렉션으로 전달하고 싶지 않습니다. 유형을 만족시킵니다.

가장 명확하고, 가장 빠르고, 가장 효율적인 방법으로 이를 처리하는 최선의 방법은 무엇입니까?

편집하다:어쩌면 더 나은 메소드 이름을 선택했어야 했지만 메소드는 모든 포인트의 평균을 계산합니다. 1개의 값에 대해서는 의미가 없지만 그 값이 다른 값을 계산하는 데 사용될 것이라고 생각하십시오. 중요한 것은 평균을 구하는 것이므로 첫 번째 방법을 호출할 수 없습니다.

도움이 되었습니까?

해결책

포장해서 컬렉션으로 전달하고 싶지 않다고 말씀하셨지만 번거로움을 최소화하면서 이를 수행할 수 있는 두 가지 방법이 있으므로 혹시 모르실 경우를 대비해 게시하겠습니다.

메소드에 매개변수를 사용할 수 있습니다.

public void Average(params Point2[] points)

그 후에는 원하는 수의 인수 또는 배열을 사용하여 호출할 수 있습니다.

Average(P1);
Average(P2, P3, P4);
Average(); // this one becomes an empty array in the method

Point[] array = new Point[] { P1, P2, P3, P4 };
Average(array);

또는 짧은 배열 구문을 사용하여 객체를 마무리할 수 있습니다.

Average({ P1 }); // this is legal C# for making an array with 1 element

편집하다: 귀하의 메모를 읽은 후 params 배열이 귀하가 원하는 것을 수행하는 가장 명확한 방법이라고 제안합니다.유일한 단점은 통과할 수 없다는 것입니다. IEnumerable<Point2> (또는 다음과 같은 다른 컬렉션 List<Point2>) 먼저 전화하지 않고 ToArray(), 실제 배열만 필요하기 때문입니다.

다른 팁

두 가지 방법을 작성하십시오

  • AverageAnddosomemath (Point2 Point)
  • AverageAnddosomemath (ienumerableu003CPoint2> 포인트들)

그리고 컬렉션에 포장하여 첫 번째 하나를 두 번째로 전화하십시오.

public decimal AverageAndDoSomeMath (Point2 point)
{
    return AverageAndSomeMath(new []{point});
}

나는 그것이 당신이 이미 염두에 두었던 것이라고 생각하지만 그것이 올바른 해결책이 아니라고 생각했습니다.

편집하다: 방법을 단순화했습니다 (Freddy Rios 감사합니다)

방법 당 단일 책임은 귀하의 방법이 한 가지만 수행해야한다고 말합니다. 산술 평균을 계산하십시오. "anddosomeothermath".

그리고 당신이 보면 공식 평균의 경우, 한 점만으로 의미있는 것을 계산할 수 있습니다. 둘 이상이 필요한 표준 편차입니다.

참고로 모든 값을 저장하지 않고도 평균 및 표준 편차를 즉시 계산할 수 있습니다. 메모리에서 훨씬 쉽습니다. John D. Cook은 a 훌륭한 블로그 기사 표준 편차를 위해 수행하는 방법에 대해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top