Велина обнови решението на 24.10.2011 16:28 (преди около 14 години)
+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и толкова
