Велина обнови решението на 24.10.2011 16:28 (преди около 13 години)
+class Array
+ def to_hash
+ hash = {}
+ self.each { |k, v| hash[k] = v}
+ return hash
+ end
+
+ def index_by(&block)
+ hash = {}
+ self.each { |e| hash[yield e] = e }
+ return hash
+ end
+
+ def subarray_count(subarray)
+ subarray_length = subarray.length
+ count = 0
+ for i in 0..self.length - subarray.length
+ if self.slice(i, subarray_length) == subarray then
+ count = count + 1
+ end
+ end
+ return count
+ end
+
+ def occurences_count
+ freq = self.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
+ return freq
+ end
+end
- В Ruby се идентира с 2 интервала; не с 4 интервала, не с табове (дори да са с "ширина 2"), а с два интервала
- Пропускай експлицитния
return
, когато не е нужен; например в края на функцията, за да върнеш стойността на променливатаx
, напиши простоx
- Няма нужда от експлицитно указан
self
в случаите на викане на метод в клас, който не завършва на=
; напримерself.each ...
е по-добре само катоeach ...
- Излишните неща в Ruby не са на почит; излишно е да се ползва
then
сif
, когато тялото наif
-а е на следващия ред - Слагай интервали, когато изреждаш аргументи на метод/блок; например тук:
{ |h,v| h[v] += 1; h }
е по-добре така:{ |h, v| h[v] += 1; h }
- В
index_by
няма нужда да взимаш блока, подаван на метода, в променлива (block
), която по-долу не ползваш никъде; просто си го викай сyield
и толкова