私はこの演習で非常に固執していますので、非常に詳細な答えに感謝します。ルビーの難しい方法を学ぶEx39:配列にキーを追加する
質問:
aDict配列にどのような点が追加されましたか?私は作成されたキーのインデックスが配列に追加されているのを見ることしかできません。 (aDict [バケット-ID]を返す?)
私はこのコードを探しています:
module Dict
def Dict.new(num_buckets = 256)
#Initializes Dict with the given number of buckets.
aDict = []
(0...num_buckets).each do |i|
aDict.push([])
end
return aDict
end
def Dict.hash_key(aDict,key)
#given a key this will create a number
#turning it into an index for one of aDicts buckets
return key.hash % aDict.length
end
def Dict.get_bucket(aDict, key)
#Given a key, find the bucket where it would go.
bucket_id = Dict.hash_key(aDict,key)
return aDict[bucket_id]
end
def Dict.get_slot(aDict, key, default=nil)
#Returns the index, key and
#value of a slot found in a bucket.
bucket = Dict.get_bucket(aDict,key)
bucket.each_with_index do |kv, i|
k, v = kv
if key == k
return i, k, v
end
end
return -1, key, default
end
def Dict.get(aDict, key, value)
#Gets the value in a bucket for the given key or the default
i, k, v = Dict.get_slot (aDict,key, Value, default = default)
return v
end
def Dict.set(aDict,key,value)
#Sets the key to the value,
#replacing any existing value.
bucket = Dict.get_bucket(aDict, key)
i,k,v = Dict.get_slot(aDict, key)
if [i] >= 0
bucket[i] = [key,value]
else
bucket.push([key,value])
end
end
はのは、私は別のファイルにDict.rbをインポートし、私はそれを実行したいとしましょう:
require .\dict.rb
#create mapping of state to abbreviation
states Dict.new()
Dict.set(states, Oregon, OR)
バケット内のキー(オレゴン)がaDict [bucket_id]によって返されるのはいつですか?
コードの上部がコードブロックの外に残っています。また、コードをインデントできますか?私は助けたいが、そのまま読むのはちょっと難しい。 https://github.com/bbsosov/ruby-style-guide – sixty4bit