개체 속성별로 Ruby의 개체 배열을 정렬하시겠습니까?
Ruby on Rails에 있는 객체 배열을 가지고 있습니다.개체의 속성을 기준으로 배열을 정렬합니다.가능합니까?
대신 sort_by를 사용하는 것이 좋습니다.
objects.sort_by {|obj| obj.attribute}
특히 속성을 계산할 수 있다면 더욱 그렇습니다.
또는 보다 간결한 접근 방식:
objects.sort_by(&:attribute)
오름차순:
objects_array.sort! { |a, b| a.attribute <=> b.attribute }
또는
objects_array.sort_by{ |obj| obj.attribute }
내림차순:
objects_array.sort! { |a, b| b.attribute <=> a.attribute }
또는
objects_array.sort_by{ |obj| obj.attribute }.reverse
네, 이것을 사용하는 것은 쉽습니다.
myarray.sort! { |a, b| a.attribute <=> b.attribute }
두 가지 속성으로 정렬해야 하는 경우, 첫 번째 하나가 두 번째보다 더 중요합니다(첫 번째 인수가 동일한 경우에만 두 번째 인수를 고려하는 것을 의미). 그러면 다음과 같이 할 수 있습니다.
myarray.sort{ |a,b| (a.attr1 == b.attr1) ? a.attr2 <=> b.attr2 : a.attr1 <=> b.attr1 }
또는 배열의 경우
myarray.sort{ |a,b| (a[0] == b[0]) ? a[1] <=> b[1] : a[0] <=> b[0] }
<=> 메서드를 재정의하여 모든 클래스를 정렬할 수 있습니다.
class Person
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def <=>(other)
@last_name + @first_name <=> other.last_name + other.first_name
end
end
이제 사용자 개체의 배열을 last_name에서 정렬할 수 있습니다.
ar = [Person.new("Eric", "Cunningham"), Person.new("Homer", "Allen")]
puts ar # => [ "Eric Cunningham", "Homer Allen"] (Person objects!)
ar.sort!
puts ar # => [ "Homer Allen", "Eric Cunningham" ]
더 우아함objects.sort_by(&:attribute)
를 추가할 수 있습니다..reverse
만약 당신이 주문을 바꿀 필요가 있습니다.
Array#sort는 위에 게시된 대로 잘 작동합니다.
myarray.sort! { |a, b| a.attribute <=> b.attribute }
하지만, 당신은 확실히 해야 합니다.<=>
연산자가 해당 속성에 대해 구현되었습니다.Ruby 네이티브 데이터 유형이라면 문제가 없습니다.그렇지 않으면, a < b이면 -1, 동일하면 0, a > b이면 1을 반환하는 구현체를 직접 작성합니다.
네, 가능합니다.
http://ariejan.net/2007/01/28/ruby-sort-an-array-of-objects-by-an-attribute/
@model_name.sort! { |a,b| a.attribute <=> b.attribute }
언급URL : https://stackoverflow.com/questions/882070/sorting-an-array-of-objects-in-ruby-by-object-attribute
'programing' 카테고리의 다른 글
미들웨어에서 Vuex로 상태가 업데이트되지 않습니까? (0) | 2023.06.11 |
---|---|
도구 모음에 뒤로 화살표 표시 (0) | 2023.06.06 |
어떻게 xkcd 스타일 그래프를 만들 수 있습니까? (0) | 2023.06.06 |
my node.js 환경에서 MariaDB의 데이터를 저장하는 방법 (0) | 2023.06.06 |
Android에서 텍스트를 굵게 변경하려면 어떻게 해야 합니까? (0) | 2023.06.06 |