Николай обнови решението на 24.10.2011 01:09 (преди около 13 години)
+class Array
+ def to_hash
+ result = {}
+ self.each { |pair| result[pair[0]] = pair[1] }
+ result
+ end
+
+ def index_by(&index_block)
+ result = {}
+ self.each do |element|
+ index = yield element
+ result[index] = element
+ end
+ result
+ end
+
+ def subarray_count(subarray)
+ result = 0
+ for i in 0..(self.size - subarray.size)
+ result = result + 1 if self[i...(i + subarray.size)] == subarray
+ end
+ result
+ end
+
+ def occurences_count
+ result = Hash.new(0)
+ self.each { |element| result[element] = result.fetch(element, 0) + 1 }
+ result
+ end
+end
- Няма нужда от експлицитно указан
self
в случаите на викане на метод в клас, когато методът не завършва на=
; напримерself.each ...
е по-добре само катоeach ...
- В
index_by
няма нужда да взимаш блока, подаван на метода, в променлива (index_block
), която по-долу не ползваш никъде; просто си го викай сyield
и толкова - Относно
subarray_count
, виж реализацията на този метод при Стефан, ако все още не си