목록에서 가장 가까운 번호를 얻는 방법 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
'programing tip' 카테고리의 다른 글
byte []로 드로어 블 (0) | 2020.12.27 |
---|---|
Java의 NoClassDefFoundError : com / google / common / base / Function (0) | 2020.12.27 |
배경 이미지 위치 지정, 패딩 추가 (0) | 2020.12.27 |
Twitter Bootstrap 3에서 기본적으로 이미지가 반응하지 않습니까? (0) | 2020.12.27 |
Angular.js ng-repeat 필터는 여러 값 중 하나를 갖는 속성 (값의 OR) (0) | 2020.12.27 |