루비의 부울 값으로 물체를 정렬하십시오
-
05-09-2019 - |
문제
이것이 전에 답변되었거나 명백하다면 나의 사과는 ... 여기와 Goog에서 검색을했고 답을 찾을 수 없었습니다.
나는 가격과 가격으로 제공자를 정렬하고 선호하는 _provider인지 여부를 정렬하고 싶습니까? (참 또는 거짓)
예를 들어 array p of Providers
...
p1.price == 1, p1.preferred_provider? == false
p2.price == 2, p2.preferred_provider? == true
p2.price == 3, p3.preferred_provider? == true
나는 p.sort_by를하고 싶습니다.
[p2 p3 p1]
iaw
p.sort_by {|x| x.preferred_provider?, x.price }
작동하지 않고 얻는다 ...
undefined method `<=>' for false:FalseClass
이 문제에 접근하는 더 나은 방법에 대한 제안이 있습니까?
해결책
대부분의 언어는 받아들이는 정렬 기능을 제공합니다 비교기 이런 종류의 일을 위해. 루비에서는 이것이 바로 배열입니다.
p.sort {|a, b| if (a.preferred_provider? == b.preferred_provider?
then a.price <=> b.price
elsif a.preferred_provider?
1
else -1
}
다른 팁
당신은 a를 정의 할 수 있습니다 <=>
에 Provider
원하는 것을 수행하고 다음을 사용하여 정렬하는 수업 Array.sort
방법 (대신 Enumerable.sort_by
). 다음은의 정의입니다 <=>
내가 채찍질했다 :
class Provider
def <=>(other)
if preferred_provider?
if other.preferred_provider?
@price <=> other.price
else
1
end
else
if other.preferred_provider?
-1
else
@price <=> other.price
end
end
end
end
그런 다음 배열이있는 경우 p
, 당신은 그냥 할 수 있습니다 p_sorted = p.sort
.
(이 코드를 테스트하지 않았으므로 몇 가지 오류가있을 수 있지만 아이디어를 보여주는 역할을합니다.)
제휴하지 않습니다 StackOverflow