내 연락처 배열 (모델)에 id 값이있는 Contact가 있으면 true를 반환하고 싶습니다. 예를 들어 :ActiveRecord 객체 배열에서 값 찾기 반복되는 DB 호출에서 값 찾기
@contacts = Contact.all
@someval = "alskjdf"
find_val(@contacts, @someval)
def find_val(contacts, val)
@contact.each do |c|
if c.id == val
return true
end
end
return false
end
나는 연락처 목록이있는 외부 API에서 일부 데이터를 제외하기 위해, 내 응용 프로그램에서 반복적으로 (이 특정 행동에 대한 최대 약 100 회)이 작업을 수행 할 수 있습니다. 이것은 너무 비싸 질 것인가?
ActiveRecord와 비슷한 빠른 작업을 수행 할 수있을 것이라고 생각했지만 데이터베이스에서 데이터를 가져온 후에 배열에서 찾을 수 있지만 그 것을 알아낼 수는 없습니다. 이것처럼 ActiveRecord를 호출하기에는 너무 비싸지 않습니까?
Contacts.find_by_id(@someval)
위의 행은 수백 번 호출해야합니다 ... 나는 배열을 통해 iterating 덜 비싼 것 같습니다. 감사!
contacts = Contact.all.inject({}) {|hash, contact| hash[contact.id] = contact; hash }
그런 다음 당신은 쉽게에서 contact[id]
와 연락처를 얻을 수 있습니다 : 당신은 DB에서 모두 검색 한 후