Димо обнови решението на 21.10.2011 19:01 (преди около 14 години)
+class Array
+ def to_hash()
+ result={}
+ self.each {|n| result[n[0]] = n[1]}
+ result
+ end
+
+ def index_by(&block)
+ result={}
+ self.each {|n| result[block[n]] = n}
+ result
+ end
+
+ def subarray_count(sub)
+ if(self.count < sub.count)
+ 0
+ else
+ result = 0
+ while !self.empty?
+ if self.last(sub.count) == sub
+ result += 1
+ end
+ self.pop
+ end
+ result
+ end
+ end
+
+ def occurences_count()
+ result=Hash.new(0)
+ self.each {|n| result[n]=self.count(n)}
+ result
+ end
+end
- Whitespace-а ти не е ОК. В Ruby се слагат интервали около знака за присвояване. Например,
result = {}иresult = Hash.new(0). - Няма нужда от скобите на
if-а вsubarray_count. - Вместо да подаваш блок експлицитно в
index_by, по-добре просто да правишyield(n). -
self.е излишен на всички места. - В
subarray_countидентацията ти е лоша.0трябва да е два интервала по-навътре. -
while !self.empty?се записва като.until empty?. Допълнително,subarray_countе много лошо написан, понеже изпразва масива, на който е извикан. Това би било доста изненадващо. Ако бях видял това преди да пусна тестовете, щях да добавя няколко, които да проверяват това. - За кратки условия, този стил е за предпочитане:
result += 1 if last(sub.count) == sub - В твоя израз
if self.last(sub.count) == subима два интервала отдясно на==. - Скобите при дефиниране методи без параметри се изпускат. Демек,
def to_hashиdef occurences_count.
