programing tip

목록에서 가장 가까운 번호를 얻는 방법

itbloger 2020. 12. 27. 10:26
반응형

목록에서 가장 가까운 번호를 얻는 방법 LINQ로?


List<int>LINQ 에서 가장 가까운 숫자를 얻는 방법은 무엇입니까?

예를 들면 :

List<int> numbers = new List<int>();
numbers.Add(2);
numbers.Add(5);
numbers.Add(7);
numbers.Add(10)

목록에서 9 번에 가장 가까운 값을 찾아야합니다.이 경우 10입니다.

LINQ로 어떻게 할 수 있습니까?


LINQ to Objects 를 사용 하고 목록이 길면 다음을 사용합니다.

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

int closest = list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);

이 방법은 Anthony Pegram이 제안한 솔루션보다 약간 더 복잡하지만 목록을 먼저 정렬 할 필요가 없다는 장점이 있습니다. 즉, O(n)대신 시간 복잡성이 있고 대신 O(n*log(n))메모리 사용량 O(1)O(n)있습니다.


LINQ를 사용하여이 작업을 수행하려면 다음과 같이 할 수 있습니다.

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

// find closest to number
int closest = list.OrderBy(item => Math.Abs(number - item)).First();

위의 솔루션은 모두 O(N)기껏해야합니다.

큰 목록이 있고이 가장 가까운 요소 쿼리를 여러 번 수행하는 경우 목록을 먼저 정렬 ( O(NlogN)) 한 다음 List<T>.BinarySearch각 쿼리에 사용 하는 것이 더 효과적입니다. k쿼리 성능 은 이전 방법 O( (k+N)logN )과 비교하여 O(kN)입니다.


이진 검색을 할 수 있습니다. 가장 가까운 숫자를 검색하는 데 도움이되는 것은 C #의 빌드 인 메서드입니다. 여기 예 : https://msdn.microsoft.com/en-us/library/y15ef976(v=vs.110).aspx


사용한 조건에 따라 가장 가까운 낮은 값 또는 높은 값을 사용하십시오.

 List<int> list = new List<int> { 2, 5, 7, 10 };
 int number = 9;
 var closest = list.Where(numbers => numbers > number).First();
 Console.WriteLine(closest);
 Console.ReadLine();

도움이 되었기를 바랍니다.

참조 URL : https://stackoverflow.com/questions/5953552/how-to-get-the-closest-number-from-a-listint-with-linq

반응형