Array.include? doesn't seem to be telling me the truth.
Obviously this is _ME_ getting it wrong, but could somebody explain what
is happening please.
1. First I set up ab array of common words
def initialize
@common_words = ["&", "and", "or", "ltd", "ltd.", "limited"]
end
2. Here I check to see if the variable words contains any uncommon
words, and return them in a new array
def remove_common_words words
ok_words = Array.new
words.each(" ") do
>word>
logger.debug "checking if word " + word + " is common"
if !@common_words.include?(word)
logger.debug word + " is not common"
ok_words << word
logger.debug "ok_words: ".concat ok_words.to_s
end
end
return ok_words
end
3. And this is the simple test...
def test_remove_common_words
e = Entity.new
x = e.remove_common_words "limited Martin & Steve's Company limited"
puts x
end
The output from the puts is: Uncommon words returned:limited Martin &
Steve's Company
···
--
Posted via http://www.ruby-forum.com/.
Try this instead:
def remove_common_words(words)
words.split(" ") - @common_words
end
···
--
Christoffer Sawicki
http://www.imagio.se/
Forgot to say that the problem is that String#each doesn't do what you want.
"foo bar".each(" ") { |x| p x }
"foo "
"bar"
(Note the space in "foo ".)
···
--
Christoffer Sawicki
http://www.imagio.se/
Hi,
See comment below
Martin Smith wrote:
Array.include? doesn't seem to be telling me the truth.
Obviously this is _ME_ getting it wrong, but could somebody explain what
is happening please.
1. First I set up ab array of common words
def initialize
@common_words = ["&", "and", "or", "ltd", "ltd.", "limited"]
end
2. Here I check to see if the variable words contains any uncommon
words, and return them in a new array
def remove_common_words words
ok_words = Array.new
words.each(" ") do
^
>-- this operation leaves a space at the end of each word.
>word>
logger.debug "checking if word " + word + " is common"
if !@common_words.include?(word)
^
>-- replace with '!@common_words.include?(word.strip)'
and it should work fine
logger.debug word + " is not common"
ok_words << word
logger.debug "ok_words: ".concat ok_words.to_s
end
end
return ok_words
end
3. And this is the simple test...
def test_remove_common_words
e = Entity.new
x = e.remove_common_words "limited Martin & Steve's Company limited"
puts x
end
The output from the puts is: Uncommon words returned:limited Martin &
Steve's Company
good luck
Bill Stevens
···
--
Posted via http://www.ruby-forum.com/\.
Thanks William - that worked great.
···
--
Posted via http://www.ruby-forum.com/.