2011-08-23 21 views
5

Đây có thể là một đoạn kéo dài thực sự nhưng sẽ làm cho cuộc sống dễ dàng hơn một chút nếu nó tồn tại.mảng Ruby tương đương với record.where đang hoạt động (tiêu chí)

Có trường hợp nào xảy ra. Tôi có một loạt các băm với một giá trị whos chính là một băm ........ Vâng, tôi biết.

Heres một lời giải thích tốt hơn:

@myArrayOfStuff[0] 
@myArrayOfStuff[0]["single-key"] 
@myArrayOfStuff[0]["single-key"]["object-identifier"] 

Đầu tiên trả về một băm. Thứ hai sẽ trả về một đối tượng (gọi là trang trong trường hợp của tôi nhưng ví dụ sử dụng các tên khác nhau) Thứ ba trả về bất kỳ biến nào mà tôi có tham chiếu làm định danh đối tượng.

Đủ đơn giản.

Điều tôi muốn làm là chọn tạo một mảng khác trong đó giá trị nhận dạng đối tượng không phải là 0 hoặc lớn hơn x. Tương tự như phương thức activerecord.where.

@x = @myArrayOfStuff.where(["single-key"]["object-identifier"]) > 3orwhatever 

Rõ ràng điều này không có tác dụng như cú pháp rất phức tạp. Nhưng có một cách khác để đi về nó? Một tuyến đường khác để thử có thể là sắp xếp mảng theo biến này. Một cái gì đó như

@x = @myArrayOfStuff.sort {|x,y| y <=> x } 

Tuy nhiên tôi không thực sự hiểu những gì đang xảy ra với phương pháp sắp xếp của Ruby. Có ai giúp được không?

+0

http://stackoverflow.com/questions/2637419/understanding-ruby-array-sort đọc này ngay bây giờ nhưng vẫn không chắc chắn nếu nó áp dụng cho những gì tôi đang cố gắng để làm – overtone

Trả lời

13

Bạn có thể sử dụng phương thức select.

@x = @my_array_of_stuff.select {|v| v["single-key"]["object-identifier"] > 3} 
+0

Tuyệt vời! Tôi hiểu mọi thứ ở đó – overtone

0
collection = [ 
    {a:1, b:2, c:3}, 
    {a:2, b:3, c:4} 
] 
where = {a:1} 
collection.select{|item| 
    where.map{|k,v| 
    item[k] == v ? true : nil 
    }.compact.length == where.length 
} 
+1

Trong khi các câu trả lời chỉ có mã không bị cấm, hãy hiểu rằng đây là một cộng đồng hỏi đáp, chứ không phải là cộng đồng tìm nguồn cung ứng, và thông thường, nếu OP hiểu mã được đăng là câu trả lời, anh/cô ấy đã nghĩ ra một giải pháp tương tự cho riêng mình, và sẽ không đăng câu hỏi ngay từ đầu. Nguyên tắc tương tự cũng áp dụng thêm cho bất kỳ độc giả tương lai nào có thể không quen với mã đang được trình bày. Do đó, vui lòng cung cấp ngữ cảnh cho câu trả lời và/hoặc mã của bạn bằng cách giải thích * cách * và/hoặc * tại sao * nó hoạt động. – XenoRo

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