Class: Array
- Inherits:
-
Object
- Object
- Array
- Defined in:
- lib/arraybooster.rb
Instance Method Summary collapse
- #anypop(list, numbers = nil) ⇒ Object
- #lpop(numbers = nil) ⇒ Object
- #lpush(element) ⇒ Object
- #ppush(element, priority) ⇒ Object
- #rpop(numbers = nil) ⇒ Object
- #rpush(element) ⇒ Object
-
#similarity(str1, str2) ⇒ Object
Using string similarity described by Simon White.
- #similars(subject) ⇒ Object
- #substitute(element, substitute_element) ⇒ Object
- #word_letter_pairs(str) ⇒ Object
Instance Method Details
#anypop(list, numbers = nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/arraybooster.rb', line 42 def anypop list, numbers = nil if numbers.nil? popped = list.pop return popped, list else popped = [] numbers.times do |i| popped << list.pop end return popped, list end end |
#lpop(numbers = nil) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/arraybooster.rb', line 73 def lpop numbers = nil return nil if self.length == 0 reversed_self = self.reverse popped, list = anypop(reversed_self, numbers) self.replace(list.reverse) return popped end |
#lpush(element) ⇒ Object
55 56 57 |
# File 'lib/arraybooster.rb', line 55 def lpush element self.insert(0, element) end |
#ppush(element, priority) ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/arraybooster.rb', line 63 def ppush element, priority if priority - 1 > self.length self.insert(-1, element) elsif priority - 1 < 0 self.insert(0, element) else self.insert(priority - 1, element) end end |
#rpop(numbers = nil) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/arraybooster.rb', line 81 def rpop numbers = nil return nil if self.length == 0 popped, list = anypop(self, numbers) self.replace(list) return popped end |
#rpush(element) ⇒ Object
59 60 61 |
# File 'lib/arraybooster.rb', line 59 def rpush element self.insert(-1, element) end |
#similarity(str1, str2) ⇒ Object
Using string similarity described by Simon White. Same functions in gem text from class WhiteSimilarity.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/arraybooster.rb', line 16 def similarity str1, str2 pairs1 = word_letter_pairs(str1) pairs2 = word_letter_pairs(str2).dup union = pairs1.length + pairs2.length intersection = 0 pairs1.each do |pair1| if index = pairs2.index(pair1) intersection += 1 pairs2.delete_at(index) end end (2.0 * intersection) / union end |
#similars(subject) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/arraybooster.rb', line 33 def similars subject @similarity_pairs = {} result = [] self.each do |element| result << element if similarity(subject.to_s, element.to_s) > 0.0 end result end |
#substitute(element, substitute_element) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/arraybooster.rb', line 88 def substitute element, substitute_element self.count(element).times do |i| index = self.index(element) self.delete_at(index) self.insert(index, substitute_element) end self end |
#word_letter_pairs(str) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/arraybooster.rb', line 7 def word_letter_pairs str @similarity_pairs[str] ||= str.upcase.split(/\s+/).map{ |word| (0 ... (word.length - 1)).map { |i| word[i, 2] } }.flatten.freeze end |