mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-15 00:26:05 +00:00
deploy
This commit is contained in:
@@ -4284,7 +4284,7 @@
|
||||
<a id="__codelineno-5-22" name="__codelineno-5-22" href="#__codelineno-5-22"></a>
|
||||
<a id="__codelineno-5-23" name="__codelineno-5-23" href="#__codelineno-5-23"></a> <span class="cm">/* 负载因子 */</span>
|
||||
<a id="__codelineno-5-24" name="__codelineno-5-24" href="#__codelineno-5-24"></a> <span class="kd">func</span> <span class="nf">loadFactor</span><span class="p">()</span> <span class="p">-></span> <span class="nb">Double</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-25" name="__codelineno-5-25" href="#__codelineno-5-25"></a> <span class="nb">Double</span><span class="p">(</span><span class="n">size</span> <span class="o">/</span> <span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-25" name="__codelineno-5-25" href="#__codelineno-5-25"></a> <span class="nb">Double</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">/</span> <span class="nb">Double</span><span class="p">(</span><span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-26" name="__codelineno-5-26" href="#__codelineno-5-26"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-27" name="__codelineno-5-27" href="#__codelineno-5-27"></a>
|
||||
<a id="__codelineno-5-28" name="__codelineno-5-28" href="#__codelineno-5-28"></a> <span class="cm">/* 查询操作 */</span>
|
||||
@@ -4330,35 +4330,36 @@
|
||||
<a id="__codelineno-5-68" name="__codelineno-5-68" href="#__codelineno-5-68"></a> <span class="k">for</span> <span class="p">(</span><span class="n">pairIndex</span><span class="p">,</span> <span class="n">pair</span><span class="p">)</span> <span class="k">in</span> <span class="n">bucket</span><span class="p">.</span><span class="n">enumerated</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-69" name="__codelineno-5-69" href="#__codelineno-5-69"></a> <span class="k">if</span> <span class="n">pair</span><span class="p">.</span><span class="n">key</span> <span class="p">==</span> <span class="n">key</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-70" name="__codelineno-5-70" href="#__codelineno-5-70"></a> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">].</span><span class="n">remove</span><span class="p">(</span><span class="n">at</span><span class="p">:</span> <span class="n">pairIndex</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-71" name="__codelineno-5-71" href="#__codelineno-5-71"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-72" name="__codelineno-5-72" href="#__codelineno-5-72"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-73" name="__codelineno-5-73" href="#__codelineno-5-73"></a> <span class="n">size</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-5-74" name="__codelineno-5-74" href="#__codelineno-5-74"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-75" name="__codelineno-5-75" href="#__codelineno-5-75"></a>
|
||||
<a id="__codelineno-5-76" name="__codelineno-5-76" href="#__codelineno-5-76"></a> <span class="cm">/* 扩容哈希表 */</span>
|
||||
<a id="__codelineno-5-77" name="__codelineno-5-77" href="#__codelineno-5-77"></a> <span class="kd">func</span> <span class="nf">extend</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-78" name="__codelineno-5-78" href="#__codelineno-5-78"></a> <span class="c1">// 暂存原哈希表</span>
|
||||
<a id="__codelineno-5-79" name="__codelineno-5-79" href="#__codelineno-5-79"></a> <span class="kd">let</span> <span class="nv">bucketsTmp</span> <span class="p">=</span> <span class="n">buckets</span>
|
||||
<a id="__codelineno-5-80" name="__codelineno-5-80" href="#__codelineno-5-80"></a> <span class="c1">// 初始化扩容后的新哈希表</span>
|
||||
<a id="__codelineno-5-81" name="__codelineno-5-81" href="#__codelineno-5-81"></a> <span class="n">capacity</span> <span class="o">*=</span> <span class="n">extendRatio</span>
|
||||
<a id="__codelineno-5-82" name="__codelineno-5-82" href="#__codelineno-5-82"></a> <span class="n">buckets</span> <span class="p">=</span> <span class="nb">Array</span><span class="p">(</span><span class="n">repeating</span><span class="p">:</span> <span class="p">[],</span> <span class="bp">count</span><span class="p">:</span> <span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-83" name="__codelineno-5-83" href="#__codelineno-5-83"></a> <span class="n">size</span> <span class="p">=</span> <span class="mi">0</span>
|
||||
<a id="__codelineno-5-84" name="__codelineno-5-84" href="#__codelineno-5-84"></a> <span class="c1">// 将键值对从原哈希表搬运至新哈希表</span>
|
||||
<a id="__codelineno-5-85" name="__codelineno-5-85" href="#__codelineno-5-85"></a> <span class="k">for</span> <span class="n">bucket</span> <span class="k">in</span> <span class="n">bucketsTmp</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-86" name="__codelineno-5-86" href="#__codelineno-5-86"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">bucket</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-87" name="__codelineno-5-87" href="#__codelineno-5-87"></a> <span class="n">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">pair</span><span class="p">.</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="n">pair</span><span class="p">.</span><span class="n">val</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-88" name="__codelineno-5-88" href="#__codelineno-5-88"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-89" name="__codelineno-5-89" href="#__codelineno-5-89"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-90" name="__codelineno-5-90" href="#__codelineno-5-90"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-91" name="__codelineno-5-91" href="#__codelineno-5-91"></a>
|
||||
<a id="__codelineno-5-92" name="__codelineno-5-92" href="#__codelineno-5-92"></a> <span class="cm">/* 打印哈希表 */</span>
|
||||
<a id="__codelineno-5-93" name="__codelineno-5-93" href="#__codelineno-5-93"></a> <span class="kd">func</span> <span class="nf">print</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-94" name="__codelineno-5-94" href="#__codelineno-5-94"></a> <span class="k">for</span> <span class="n">bucket</span> <span class="k">in</span> <span class="n">buckets</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-95" name="__codelineno-5-95" href="#__codelineno-5-95"></a> <span class="kd">let</span> <span class="nv">res</span> <span class="p">=</span> <span class="n">bucket</span><span class="p">.</span><span class="bp">map</span> <span class="p">{</span> <span class="s">"</span><span class="si">\(</span><span class="nv">$0</span><span class="p">.</span><span class="n">key</span><span class="si">)</span><span class="s"> -> </span><span class="si">\(</span><span class="nv">$0</span><span class="p">.</span><span class="n">val</span><span class="si">)</span><span class="s">"</span> <span class="p">}</span>
|
||||
<a id="__codelineno-5-96" name="__codelineno-5-96" href="#__codelineno-5-96"></a> <span class="n">Swift</span><span class="p">.</span><span class="bp">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-97" name="__codelineno-5-97" href="#__codelineno-5-97"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-98" name="__codelineno-5-98" href="#__codelineno-5-98"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-99" name="__codelineno-5-99" href="#__codelineno-5-99"></a><span class="p">}</span>
|
||||
<a id="__codelineno-5-71" name="__codelineno-5-71" href="#__codelineno-5-71"></a> <span class="n">size</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<a id="__codelineno-5-72" name="__codelineno-5-72" href="#__codelineno-5-72"></a> <span class="k">break</span>
|
||||
<a id="__codelineno-5-73" name="__codelineno-5-73" href="#__codelineno-5-73"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-74" name="__codelineno-5-74" href="#__codelineno-5-74"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-75" name="__codelineno-5-75" href="#__codelineno-5-75"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-76" name="__codelineno-5-76" href="#__codelineno-5-76"></a>
|
||||
<a id="__codelineno-5-77" name="__codelineno-5-77" href="#__codelineno-5-77"></a> <span class="cm">/* 扩容哈希表 */</span>
|
||||
<a id="__codelineno-5-78" name="__codelineno-5-78" href="#__codelineno-5-78"></a> <span class="kd">func</span> <span class="nf">extend</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-79" name="__codelineno-5-79" href="#__codelineno-5-79"></a> <span class="c1">// 暂存原哈希表</span>
|
||||
<a id="__codelineno-5-80" name="__codelineno-5-80" href="#__codelineno-5-80"></a> <span class="kd">let</span> <span class="nv">bucketsTmp</span> <span class="p">=</span> <span class="n">buckets</span>
|
||||
<a id="__codelineno-5-81" name="__codelineno-5-81" href="#__codelineno-5-81"></a> <span class="c1">// 初始化扩容后的新哈希表</span>
|
||||
<a id="__codelineno-5-82" name="__codelineno-5-82" href="#__codelineno-5-82"></a> <span class="n">capacity</span> <span class="o">*=</span> <span class="n">extendRatio</span>
|
||||
<a id="__codelineno-5-83" name="__codelineno-5-83" href="#__codelineno-5-83"></a> <span class="n">buckets</span> <span class="p">=</span> <span class="nb">Array</span><span class="p">(</span><span class="n">repeating</span><span class="p">:</span> <span class="p">[],</span> <span class="bp">count</span><span class="p">:</span> <span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-84" name="__codelineno-5-84" href="#__codelineno-5-84"></a> <span class="n">size</span> <span class="p">=</span> <span class="mi">0</span>
|
||||
<a id="__codelineno-5-85" name="__codelineno-5-85" href="#__codelineno-5-85"></a> <span class="c1">// 将键值对从原哈希表搬运至新哈希表</span>
|
||||
<a id="__codelineno-5-86" name="__codelineno-5-86" href="#__codelineno-5-86"></a> <span class="k">for</span> <span class="n">bucket</span> <span class="k">in</span> <span class="n">bucketsTmp</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-87" name="__codelineno-5-87" href="#__codelineno-5-87"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">bucket</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-88" name="__codelineno-5-88" href="#__codelineno-5-88"></a> <span class="n">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">pair</span><span class="p">.</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="n">pair</span><span class="p">.</span><span class="n">val</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-89" name="__codelineno-5-89" href="#__codelineno-5-89"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-90" name="__codelineno-5-90" href="#__codelineno-5-90"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-91" name="__codelineno-5-91" href="#__codelineno-5-91"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-92" name="__codelineno-5-92" href="#__codelineno-5-92"></a>
|
||||
<a id="__codelineno-5-93" name="__codelineno-5-93" href="#__codelineno-5-93"></a> <span class="cm">/* 打印哈希表 */</span>
|
||||
<a id="__codelineno-5-94" name="__codelineno-5-94" href="#__codelineno-5-94"></a> <span class="kd">func</span> <span class="nf">print</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-95" name="__codelineno-5-95" href="#__codelineno-5-95"></a> <span class="k">for</span> <span class="n">bucket</span> <span class="k">in</span> <span class="n">buckets</span> <span class="p">{</span>
|
||||
<a id="__codelineno-5-96" name="__codelineno-5-96" href="#__codelineno-5-96"></a> <span class="kd">let</span> <span class="nv">res</span> <span class="p">=</span> <span class="n">bucket</span><span class="p">.</span><span class="bp">map</span> <span class="p">{</span> <span class="s">"</span><span class="si">\(</span><span class="nv">$0</span><span class="p">.</span><span class="n">key</span><span class="si">)</span><span class="s"> -> </span><span class="si">\(</span><span class="nv">$0</span><span class="p">.</span><span class="n">val</span><span class="si">)</span><span class="s">"</span> <span class="p">}</span>
|
||||
<a id="__codelineno-5-97" name="__codelineno-5-97" href="#__codelineno-5-97"></a> <span class="n">Swift</span><span class="p">.</span><span class="bp">print</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-5-98" name="__codelineno-5-98" href="#__codelineno-5-98"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-99" name="__codelineno-5-99" href="#__codelineno-5-99"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-5-100" name="__codelineno-5-100" href="#__codelineno-5-100"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
@@ -5636,7 +5637,7 @@
|
||||
<a id="__codelineno-17-24" name="__codelineno-17-24" href="#__codelineno-17-24"></a>
|
||||
<a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> <span class="cm">/* 负载因子 */</span>
|
||||
<a id="__codelineno-17-26" name="__codelineno-17-26" href="#__codelineno-17-26"></a> <span class="kd">func</span> <span class="nf">loadFactor</span><span class="p">()</span> <span class="p">-></span> <span class="nb">Double</span> <span class="p">{</span>
|
||||
<a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="nb">Double</span><span class="p">(</span><span class="n">size</span> <span class="o">/</span> <span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="nb">Double</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">/</span> <span class="nb">Double</span><span class="p">(</span><span class="n">capacity</span><span class="p">)</span>
|
||||
<a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a>
|
||||
<a id="__codelineno-17-30" name="__codelineno-17-30" href="#__codelineno-17-30"></a> <span class="cm">/* 搜索 key 对应的桶索引 */</span>
|
||||
|
||||
@@ -4554,82 +4554,62 @@
|
||||
<a id="__codelineno-30-15" name="__codelineno-30-15" href="#__codelineno-30-15"></a>
|
||||
<a id="__codelineno-30-16" name="__codelineno-30-16" href="#__codelineno-30-16"></a><span class="cm">/* 基于数组实现的哈希表 */</span>
|
||||
<a id="__codelineno-30-17" name="__codelineno-30-17" href="#__codelineno-30-17"></a><span class="kd">class</span> <span class="nc">ArrayHashMap</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-18" name="__codelineno-30-18" href="#__codelineno-30-18"></a> <span class="kd">private</span> <span class="kd">var</span> <span class="nv">buckets</span><span class="p">:</span> <span class="p">[</span><span class="n">Pair</span><span class="p">?]</span> <span class="p">=</span> <span class="p">[]</span>
|
||||
<a id="__codelineno-30-18" name="__codelineno-30-18" href="#__codelineno-30-18"></a> <span class="kd">private</span> <span class="kd">var</span> <span class="nv">buckets</span><span class="p">:</span> <span class="p">[</span><span class="n">Pair</span><span class="p">?]</span>
|
||||
<a id="__codelineno-30-19" name="__codelineno-30-19" href="#__codelineno-30-19"></a>
|
||||
<a id="__codelineno-30-20" name="__codelineno-30-20" href="#__codelineno-30-20"></a> <span class="kd">init</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-21" name="__codelineno-30-21" href="#__codelineno-30-21"></a> <span class="c1">// 初始化数组,包含 100 个桶</span>
|
||||
<a id="__codelineno-30-22" name="__codelineno-30-22" href="#__codelineno-30-22"></a> <span class="k">for</span> <span class="kc">_</span> <span class="k">in</span> <span class="mi">0</span> <span class="p">..</span><span class="o"><</span> <span class="mi">100</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-23" name="__codelineno-30-23" href="#__codelineno-30-23"></a> <span class="n">buckets</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-24" name="__codelineno-30-24" href="#__codelineno-30-24"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-25" name="__codelineno-30-25" href="#__codelineno-30-25"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-26" name="__codelineno-30-26" href="#__codelineno-30-26"></a>
|
||||
<a id="__codelineno-30-27" name="__codelineno-30-27" href="#__codelineno-30-27"></a> <span class="cm">/* 哈希函数 */</span>
|
||||
<a id="__codelineno-30-28" name="__codelineno-30-28" href="#__codelineno-30-28"></a> <span class="kd">private</span> <span class="kd">func</span> <span class="nf">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Int</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-29" name="__codelineno-30-29" href="#__codelineno-30-29"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">key</span> <span class="o">%</span> <span class="mi">100</span>
|
||||
<a id="__codelineno-30-30" name="__codelineno-30-30" href="#__codelineno-30-30"></a> <span class="k">return</span> <span class="n">index</span>
|
||||
<a id="__codelineno-30-31" name="__codelineno-30-31" href="#__codelineno-30-31"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-32" name="__codelineno-30-32" href="#__codelineno-30-32"></a>
|
||||
<a id="__codelineno-30-33" name="__codelineno-30-33" href="#__codelineno-30-33"></a> <span class="cm">/* 查询操作 */</span>
|
||||
<a id="__codelineno-30-34" name="__codelineno-30-34" href="#__codelineno-30-34"></a> <span class="kd">func</span> <span class="nf">get</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">String</span><span class="p">?</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-35" name="__codelineno-30-35" href="#__codelineno-30-35"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-36" name="__codelineno-30-36" href="#__codelineno-30-36"></a> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-30-37" name="__codelineno-30-37" href="#__codelineno-30-37"></a> <span class="k">return</span> <span class="n">pair</span><span class="p">?.</span><span class="n">val</span>
|
||||
<a id="__codelineno-30-38" name="__codelineno-30-38" href="#__codelineno-30-38"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-39" name="__codelineno-30-39" href="#__codelineno-30-39"></a>
|
||||
<a id="__codelineno-30-40" name="__codelineno-30-40" href="#__codelineno-30-40"></a> <span class="cm">/* 添加操作 */</span>
|
||||
<a id="__codelineno-30-41" name="__codelineno-30-41" href="#__codelineno-30-41"></a> <span class="kd">func</span> <span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">String</span><span class="p">)</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-42" name="__codelineno-30-42" href="#__codelineno-30-42"></a> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="n">val</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-43" name="__codelineno-30-43" href="#__codelineno-30-43"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-44" name="__codelineno-30-44" href="#__codelineno-30-44"></a> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="p">=</span> <span class="n">pair</span>
|
||||
<a id="__codelineno-30-45" name="__codelineno-30-45" href="#__codelineno-30-45"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-46" name="__codelineno-30-46" href="#__codelineno-30-46"></a>
|
||||
<a id="__codelineno-30-47" name="__codelineno-30-47" href="#__codelineno-30-47"></a> <span class="cm">/* 删除操作 */</span>
|
||||
<a id="__codelineno-30-48" name="__codelineno-30-48" href="#__codelineno-30-48"></a> <span class="kd">func</span> <span class="nf">remove</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-49" name="__codelineno-30-49" href="#__codelineno-30-49"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-50" name="__codelineno-30-50" href="#__codelineno-30-50"></a> <span class="c1">// 置为 nil ,代表删除</span>
|
||||
<a id="__codelineno-30-51" name="__codelineno-30-51" href="#__codelineno-30-51"></a> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="p">=</span> <span class="kc">nil</span>
|
||||
<a id="__codelineno-30-52" name="__codelineno-30-52" href="#__codelineno-30-52"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-53" name="__codelineno-30-53" href="#__codelineno-30-53"></a>
|
||||
<a id="__codelineno-30-54" name="__codelineno-30-54" href="#__codelineno-30-54"></a> <span class="cm">/* 获取所有键值对 */</span>
|
||||
<a id="__codelineno-30-55" name="__codelineno-30-55" href="#__codelineno-30-55"></a> <span class="kd">func</span> <span class="nf">pairSet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="n">Pair</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-56" name="__codelineno-30-56" href="#__codelineno-30-56"></a> <span class="kd">var</span> <span class="nv">pairSet</span><span class="p">:</span> <span class="p">[</span><span class="n">Pair</span><span class="p">]</span> <span class="p">=</span> <span class="p">[]</span>
|
||||
<a id="__codelineno-30-57" name="__codelineno-30-57" href="#__codelineno-30-57"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">buckets</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-58" name="__codelineno-30-58" href="#__codelineno-30-58"></a> <span class="k">if</span> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">pair</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-59" name="__codelineno-30-59" href="#__codelineno-30-59"></a> <span class="n">pairSet</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-60" name="__codelineno-30-60" href="#__codelineno-30-60"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-61" name="__codelineno-30-61" href="#__codelineno-30-61"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-62" name="__codelineno-30-62" href="#__codelineno-30-62"></a> <span class="k">return</span> <span class="n">pairSet</span>
|
||||
<a id="__codelineno-30-63" name="__codelineno-30-63" href="#__codelineno-30-63"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-64" name="__codelineno-30-64" href="#__codelineno-30-64"></a>
|
||||
<a id="__codelineno-30-65" name="__codelineno-30-65" href="#__codelineno-30-65"></a> <span class="cm">/* 获取所有键 */</span>
|
||||
<a id="__codelineno-30-66" name="__codelineno-30-66" href="#__codelineno-30-66"></a> <span class="kd">func</span> <span class="nf">keySet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="nb">Int</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-67" name="__codelineno-30-67" href="#__codelineno-30-67"></a> <span class="kd">var</span> <span class="nv">keySet</span><span class="p">:</span> <span class="p">[</span><span class="nb">Int</span><span class="p">]</span> <span class="p">=</span> <span class="p">[]</span>
|
||||
<a id="__codelineno-30-68" name="__codelineno-30-68" href="#__codelineno-30-68"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">buckets</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-69" name="__codelineno-30-69" href="#__codelineno-30-69"></a> <span class="k">if</span> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">pair</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-70" name="__codelineno-30-70" href="#__codelineno-30-70"></a> <span class="n">keySet</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-71" name="__codelineno-30-71" href="#__codelineno-30-71"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-72" name="__codelineno-30-72" href="#__codelineno-30-72"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-73" name="__codelineno-30-73" href="#__codelineno-30-73"></a> <span class="k">return</span> <span class="n">keySet</span>
|
||||
<a id="__codelineno-30-74" name="__codelineno-30-74" href="#__codelineno-30-74"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-75" name="__codelineno-30-75" href="#__codelineno-30-75"></a>
|
||||
<a id="__codelineno-30-76" name="__codelineno-30-76" href="#__codelineno-30-76"></a> <span class="cm">/* 获取所有值 */</span>
|
||||
<a id="__codelineno-30-77" name="__codelineno-30-77" href="#__codelineno-30-77"></a> <span class="kd">func</span> <span class="nf">valueSet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="nb">String</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-78" name="__codelineno-30-78" href="#__codelineno-30-78"></a> <span class="kd">var</span> <span class="nv">valueSet</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span><span class="p">]</span> <span class="p">=</span> <span class="p">[]</span>
|
||||
<a id="__codelineno-30-79" name="__codelineno-30-79" href="#__codelineno-30-79"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">buckets</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-80" name="__codelineno-30-80" href="#__codelineno-30-80"></a> <span class="k">if</span> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">pair</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-81" name="__codelineno-30-81" href="#__codelineno-30-81"></a> <span class="n">valueSet</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="n">val</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-82" name="__codelineno-30-82" href="#__codelineno-30-82"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-83" name="__codelineno-30-83" href="#__codelineno-30-83"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-84" name="__codelineno-30-84" href="#__codelineno-30-84"></a> <span class="k">return</span> <span class="n">valueSet</span>
|
||||
<a id="__codelineno-30-85" name="__codelineno-30-85" href="#__codelineno-30-85"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-86" name="__codelineno-30-86" href="#__codelineno-30-86"></a>
|
||||
<a id="__codelineno-30-87" name="__codelineno-30-87" href="#__codelineno-30-87"></a> <span class="cm">/* 打印哈希表 */</span>
|
||||
<a id="__codelineno-30-88" name="__codelineno-30-88" href="#__codelineno-30-88"></a> <span class="kd">func</span> <span class="nf">print</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-89" name="__codelineno-30-89" href="#__codelineno-30-89"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">pairSet</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-90" name="__codelineno-30-90" href="#__codelineno-30-90"></a> <span class="n">Swift</span><span class="p">.</span><span class="bp">print</span><span class="p">(</span><span class="s">"</span><span class="si">\(</span><span class="n">pair</span><span class="p">.</span><span class="n">key</span><span class="si">)</span><span class="s"> -> </span><span class="si">\(</span><span class="n">pair</span><span class="p">.</span><span class="n">val</span><span class="si">)</span><span class="s">"</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-91" name="__codelineno-30-91" href="#__codelineno-30-91"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-92" name="__codelineno-30-92" href="#__codelineno-30-92"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-93" name="__codelineno-30-93" href="#__codelineno-30-93"></a><span class="p">}</span>
|
||||
<a id="__codelineno-30-22" name="__codelineno-30-22" href="#__codelineno-30-22"></a> <span class="n">buckets</span> <span class="p">=</span> <span class="nb">Array</span><span class="p">(</span><span class="n">repeating</span><span class="p">:</span> <span class="kc">nil</span><span class="p">,</span> <span class="bp">count</span><span class="p">:</span> <span class="mi">100</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-23" name="__codelineno-30-23" href="#__codelineno-30-23"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-24" name="__codelineno-30-24" href="#__codelineno-30-24"></a>
|
||||
<a id="__codelineno-30-25" name="__codelineno-30-25" href="#__codelineno-30-25"></a> <span class="cm">/* 哈希函数 */</span>
|
||||
<a id="__codelineno-30-26" name="__codelineno-30-26" href="#__codelineno-30-26"></a> <span class="kd">private</span> <span class="kd">func</span> <span class="nf">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Int</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-27" name="__codelineno-30-27" href="#__codelineno-30-27"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">key</span> <span class="o">%</span> <span class="mi">100</span>
|
||||
<a id="__codelineno-30-28" name="__codelineno-30-28" href="#__codelineno-30-28"></a> <span class="k">return</span> <span class="n">index</span>
|
||||
<a id="__codelineno-30-29" name="__codelineno-30-29" href="#__codelineno-30-29"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-30" name="__codelineno-30-30" href="#__codelineno-30-30"></a>
|
||||
<a id="__codelineno-30-31" name="__codelineno-30-31" href="#__codelineno-30-31"></a> <span class="cm">/* 查询操作 */</span>
|
||||
<a id="__codelineno-30-32" name="__codelineno-30-32" href="#__codelineno-30-32"></a> <span class="kd">func</span> <span class="nf">get</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">String</span><span class="p">?</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-33" name="__codelineno-30-33" href="#__codelineno-30-33"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-34" name="__codelineno-30-34" href="#__codelineno-30-34"></a> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||
<a id="__codelineno-30-35" name="__codelineno-30-35" href="#__codelineno-30-35"></a> <span class="k">return</span> <span class="n">pair</span><span class="p">?.</span><span class="n">val</span>
|
||||
<a id="__codelineno-30-36" name="__codelineno-30-36" href="#__codelineno-30-36"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-37" name="__codelineno-30-37" href="#__codelineno-30-37"></a>
|
||||
<a id="__codelineno-30-38" name="__codelineno-30-38" href="#__codelineno-30-38"></a> <span class="cm">/* 添加操作 */</span>
|
||||
<a id="__codelineno-30-39" name="__codelineno-30-39" href="#__codelineno-30-39"></a> <span class="kd">func</span> <span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">String</span><span class="p">)</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-40" name="__codelineno-30-40" href="#__codelineno-30-40"></a> <span class="kd">let</span> <span class="nv">pair</span> <span class="p">=</span> <span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="n">val</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-41" name="__codelineno-30-41" href="#__codelineno-30-41"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-42" name="__codelineno-30-42" href="#__codelineno-30-42"></a> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="p">=</span> <span class="n">pair</span>
|
||||
<a id="__codelineno-30-43" name="__codelineno-30-43" href="#__codelineno-30-43"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-44" name="__codelineno-30-44" href="#__codelineno-30-44"></a>
|
||||
<a id="__codelineno-30-45" name="__codelineno-30-45" href="#__codelineno-30-45"></a> <span class="cm">/* 删除操作 */</span>
|
||||
<a id="__codelineno-30-46" name="__codelineno-30-46" href="#__codelineno-30-46"></a> <span class="kd">func</span> <span class="nf">remove</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-47" name="__codelineno-30-47" href="#__codelineno-30-47"></a> <span class="kd">let</span> <span class="nv">index</span> <span class="p">=</span> <span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-48" name="__codelineno-30-48" href="#__codelineno-30-48"></a> <span class="c1">// 置为 nil ,代表删除</span>
|
||||
<a id="__codelineno-30-49" name="__codelineno-30-49" href="#__codelineno-30-49"></a> <span class="n">buckets</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="p">=</span> <span class="kc">nil</span>
|
||||
<a id="__codelineno-30-50" name="__codelineno-30-50" href="#__codelineno-30-50"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-51" name="__codelineno-30-51" href="#__codelineno-30-51"></a>
|
||||
<a id="__codelineno-30-52" name="__codelineno-30-52" href="#__codelineno-30-52"></a> <span class="cm">/* 获取所有键值对 */</span>
|
||||
<a id="__codelineno-30-53" name="__codelineno-30-53" href="#__codelineno-30-53"></a> <span class="kd">func</span> <span class="nf">pairSet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="n">Pair</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-54" name="__codelineno-30-54" href="#__codelineno-30-54"></a> <span class="n">buckets</span><span class="p">.</span><span class="n">compactMap</span> <span class="p">{</span> <span class="nv">$0</span> <span class="p">}</span>
|
||||
<a id="__codelineno-30-55" name="__codelineno-30-55" href="#__codelineno-30-55"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-56" name="__codelineno-30-56" href="#__codelineno-30-56"></a>
|
||||
<a id="__codelineno-30-57" name="__codelineno-30-57" href="#__codelineno-30-57"></a> <span class="cm">/* 获取所有键 */</span>
|
||||
<a id="__codelineno-30-58" name="__codelineno-30-58" href="#__codelineno-30-58"></a> <span class="kd">func</span> <span class="nf">keySet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="nb">Int</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-59" name="__codelineno-30-59" href="#__codelineno-30-59"></a> <span class="n">buckets</span><span class="p">.</span><span class="n">compactMap</span> <span class="p">{</span> <span class="nv">$0</span><span class="p">?.</span><span class="n">key</span> <span class="p">}</span>
|
||||
<a id="__codelineno-30-60" name="__codelineno-30-60" href="#__codelineno-30-60"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-61" name="__codelineno-30-61" href="#__codelineno-30-61"></a>
|
||||
<a id="__codelineno-30-62" name="__codelineno-30-62" href="#__codelineno-30-62"></a> <span class="cm">/* 获取所有值 */</span>
|
||||
<a id="__codelineno-30-63" name="__codelineno-30-63" href="#__codelineno-30-63"></a> <span class="kd">func</span> <span class="nf">valueSet</span><span class="p">()</span> <span class="p">-></span> <span class="p">[</span><span class="nb">String</span><span class="p">]</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-64" name="__codelineno-30-64" href="#__codelineno-30-64"></a> <span class="n">buckets</span><span class="p">.</span><span class="n">compactMap</span> <span class="p">{</span> <span class="nv">$0</span><span class="p">?.</span><span class="n">val</span> <span class="p">}</span>
|
||||
<a id="__codelineno-30-65" name="__codelineno-30-65" href="#__codelineno-30-65"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-66" name="__codelineno-30-66" href="#__codelineno-30-66"></a>
|
||||
<a id="__codelineno-30-67" name="__codelineno-30-67" href="#__codelineno-30-67"></a> <span class="cm">/* 打印哈希表 */</span>
|
||||
<a id="__codelineno-30-68" name="__codelineno-30-68" href="#__codelineno-30-68"></a> <span class="kd">func</span> <span class="nf">print</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-69" name="__codelineno-30-69" href="#__codelineno-30-69"></a> <span class="k">for</span> <span class="n">pair</span> <span class="k">in</span> <span class="n">pairSet</span><span class="p">()</span> <span class="p">{</span>
|
||||
<a id="__codelineno-30-70" name="__codelineno-30-70" href="#__codelineno-30-70"></a> <span class="n">Swift</span><span class="p">.</span><span class="bp">print</span><span class="p">(</span><span class="s">"</span><span class="si">\(</span><span class="n">pair</span><span class="p">.</span><span class="n">key</span><span class="si">)</span><span class="s"> -> </span><span class="si">\(</span><span class="n">pair</span><span class="p">.</span><span class="n">val</span><span class="si">)</span><span class="s">"</span><span class="p">)</span>
|
||||
<a id="__codelineno-30-71" name="__codelineno-30-71" href="#__codelineno-30-71"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-72" name="__codelineno-30-72" href="#__codelineno-30-72"></a> <span class="p">}</span>
|
||||
<a id="__codelineno-30-73" name="__codelineno-30-73" href="#__codelineno-30-73"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
|
||||
Reference in New Issue
Block a user