2013-03-26 31 views
8

Tôi muốn làm tương đương với Array.some trong đường ray.Tương đương với Array.some trong ruby ​​/ rails

Dưới đây là một ví dụ áp dụng cho usecase của tôi mà là loại một phức tạp hơn include? (tôi muốn áp dụng điều này để *args):

ary = [:a, :b, :c, d: :x, e: :y] # => [:a, :b, :c, { :d => :x, :e => :y }] 
search = :e 
contained = ary.some { |x| 
    x == search || x.try(:key?, search) 
} # => true 
assert contained, "We should have found #{search}" 

tôi có thể làm điều này với ary.map nhưng điều đó sẽ có nghĩa là đi qua toàn bộ mảng và sau đó một lần nữa kiểm tra nội dung của nó. Tôi cũng có thể sử dụng ary.drop_while và xác minh xem nó có trả về một mảng trống hay không, nhưng một lần nữa, tôi sẽ cần phải kiểm tra kết quả. Tôi cũng đã xem ary.bsearch nhưng có một số hạn chế lạ tôi không hiểu lắm về thứ tự của các phần tử.

Tôi đã bỏ lỡ điều gì chưa? Không phải là một cách dễ dàng để làm điều đó? Tôi đang sử dụng ruby2 và ray 4 (cạnh).

+0

Bạn có thể cung cấp kết quả đầu ra không? – Linuxios

+0

Tôi đã thêm đầu ra làm nhận xét trong mã. 'ary.some' nên ouput đúng trong usecase – Crystark

Trả lời

0

Nếu bạn đang thực sự tìm kiếm some? bạn có thể muốn một cái gì đó như thế này

module Enumerable 
    def some? 
    self.any? && !self.all? 
    end 
end 

này sẽ cung cấp cho bạn true chỉ khi một số yếu tố được thiết lập nhưng không phải tất cả.

Khám phá đoạn mã tại đây https://coderwall.com/p/wcgj2w

+0

'Array.some' không trả về false nếu tất cả các phần tử đều đúng. – tokland

Các vấn đề liên quan