Георги обнови решението на 18.10.2011 12:58 (преди около 13 години)
+class Array
+
+ def to_hash
+ self.inject({}) {|result, item| result[item[0]] = item[1]; result}
+ end
+
+ def index_by
+ self.inject({}) {|result, item| result[yield item] = item; result}
+ end
+
+ def occurences_count
+ self.inject(Hash.new(0)) {|result, item| result[item] += 1; result }
+ end
+
+ def subarray_count(subarray)
+ result = 0
+ (0...self.size).each do |i|
+ result +=1 if self[i...i+subarray.size] == subarray
+ end
+ result
+ end
+
+end
Бих пил по бира с човек, който пише такъв код :)
Съгласна :) Особено subarray_count, много яко си го измислил.
Виждам, че си се влюбил в Enumerable#inject
:) Препоръките ми са свързани основно с coding-стила ти:
- По конвенция, едноредовите блокове с къдрави скоби имат интервали около скобите така:
sth { |args| code }
- Каквато и конвенция да ползваш, прави го консистентно; в
occurences_count
имаш един интервал преди затварящата}
скоба :) - И при теб няма нужда от експлицитно указан
self
в случаите от рода наself.inject ...
; skip it! - Не оставяй празни редове след
class Something
и преди съответния му затварящend
И си по-перфектен :)