File.open(DICT) do |f|
f.each do |word|
word.chomp!
next if word.length != 7
word.downcase!
letters = word.split(//).sort!
uniques = letters.uniq
word = letters.join
uniques.each do |letter|
stem = word.sub(letter, "")
(STEMS[stem] ||= {})[letter] = 1
end
end
end
Where that first line means: if STEMS[stem] isn't defined, assign a
new Hash to it.
It could also be done like this:
STEMS = Hash.new {|h, k| h[k] = {}} # near the top of your example
code
STEMS[stem][letter] = 1 # and this in place of the line you asked
about
Hash.new allows you to use a block to define the behavior of the hash
if the element isn't found. With no block (as in the example code you
posted), nil is returned.
···
On Dec 1, 8:48 pm, Mark Woodward <markonli...@internode.on.net> wrote:
Hi all,
could someone explain the line:
(STEMS[stem] ||= {})[letter] = 1
in the code below?
The '[letter] = 1' appended to the end was the bit I didn't understand.
Definitely easier to read as your e.g. above. But I guess once you know
the syntax (STEMS[stem] ||= {})[letter] = 1 makes sense. A bit too
'Perlish' for a newbie though
Where that first line means: if STEMS[stem] isn't defined, assign a
new Hash to it.
It could also be done like this:
STEMS = Hash.new {|h, k| h[k] = {}} # near the top of your example
code
STEMS[stem][letter] = 1 # and this in place of the line you asked
about
Hash.new allows you to use a block to define the behavior of the hash
if the element isn't found. With no block (as in the example code you
posted), nil is returned.
thanks,
···
On Sat, 1 Dec 2007 20:05:45 -0800 (PST) yermej <yermej@gmail.com> wrote:
On Dec 1, 8:48 pm, Mark Woodward <markonli...@internode.on.net> wrote: