Array.include? strangeness

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/.