2011-02-04 33 views
14

Dòng sau đây hoạt động tốt trong ruby ​​1.8.7 và không phải trong 1.8.6. Tôi có thể sử dụng phương án thay thế nào trong 1.8.6Đếm các phiên bản của một giá trị trong một mảng trong Ruby 1.8.6

x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.count(3) 
=> 3 

Vì đếm không phải là một phương pháp trong mảng trong phiên bản 1.8.6, tôi nhận được lỗi này. Có một phương pháp tương tự trong phiên bản này?

Trả lời

9

Như một mẹo chung: đó là thực sự mát mẻ backports library by Marc-André Lafortune, mà cố gắng thực hiện càng nhiều các tính năng mới của Ruby 1.8.7, 1.8.8 (tức là đỉnh của chi nhánh 1_8 trong kho lưu trữ Subversion), 1.9.1 và 1.9.2 thư viện chuẩn cũng như một số phương thức chọn từ ActiveSupport nhất có thể trong Ruby tương thích thuần túy, tương thích 1.8-1.9.

Vì vậy, nếu bạn chỉ cần làm

require 'backports' 

nó sẽ biến của Ruby của bạn 1.8.6, 1.8.7 hoặc 1.9.1 vào càng gần với Ruby 1.9.2 càng tốt mà không rơi vào C hoặc phá vỡ khả năng tương thích ngược.

Tuyên bố miễn trừ trách nhiệm: Tôi chưa thực sự sử dụng bản thân, vì tôi không thấy điểm sử dụng phiên bản Ruby lỗi thời.

+1

FYI, bây giờ có thể yêu cầu backports cụ thể (trong trường hợp này là yêu cầu 'backports/1.8.7/enumerable/count'') –

11
count = x.select {|e| e == 3}.size 
+1

Nếu nó đáng nhớ hơn đối với bất kỳ ai, 'find_all' là bí danh cho' select' - hoặc có thể 'select' là bí danh cho' find_all'. Trong mọi trường hợp, cả hai đều hoạt động tốt ở đây. – Telemachus

+0

Tôi đã từng nhầm lẫn giữa chọn và tìm Tất cả trong Groovy mọi lúc. Vì vậy, nếu bạn sử dụng nhiều ngôn ngữ động, hãy cố gắng gắn bó với một :) – Geo

20
x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.grep(3).size 
#=> 3 
+0

Cleaner .. Cảm ơn .. – bragboy

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