<div dir="ltr"><div>let question = &quot;&quot;&quot;</div><div>    Please see the extension to Dictionary below.</div><div>    Is there a simpler or better way to accomplish the same thing?</div><div>    &quot;&quot;&quot;</div><div>extension Dictionary where</div><div>    Value: RangeReplaceableCollection,</div><div>    Value: ExpressibleByArrayLiteral,</div><div>    Value.Element == Value.ArrayLiteralElement</div><div>{</div><div>    mutating func append(value: Value.Element, for key: Key) {</div><div>        if self[key]?.append(value) == nil {</div><div>            self[key] = [value]</div><div>        }</div><div>    }</div><div>}</div><div>func usageExample() {</div><div>    var characterIndexMap = [Character : [Int]]()</div><div>    for (ci, c) in question.characters.enumerated() {</div><div>        characterIndexMap.append(value: ci, for: c)</div><div>    }</div><div>    for (character, indices) in characterIndexMap</div><div>        .sorted(by: { $0.1.count &gt; $1.1.count })</div><div>    {</div><div>        print(&quot;\(character.debugDescription) occurs at indices:&quot;, indices)</div><div>    }</div><div>}</div><div>usageExample()</div><div><br></div><div><br></div><div>/* Will print:</div><div><div>&quot; &quot; occurs at indices: [6, 10, 14, 24, 27, 38, 48, 54, 56, 64, 67, 74, 78, 81, 92, 96, 101]</div><div>&quot;e&quot; occurs at indices: [2, 5, 8, 9, 13, 15, 18, 40, 51, 53, 62, 69, 72, 95, 100]</div><div>&quot;t&quot; occurs at indices: [11, 17, 25, 31, 49, 70, 71, 79, 93, 102]</div><div>&quot;s&quot; occurs at indices: [4, 7, 20, 47, 57, 90, 97]</div><div>&quot;o&quot; occurs at indices: [22, 26, 33, 42, 65, 80, 85]</div><div>&quot;i&quot; occurs at indices: [21, 29, 32, 58, 89, 104]</div><div>&quot;a&quot; occurs at indices: [3, 35, 55, 76, 82, 98]</div><div>&quot;h&quot; occurs at indices: [12, 50, 91, 94, 103]</div><div>&quot;r&quot; occurs at indices: [36, 52, 63, 66, 73]</div><div>&quot;l&quot; occurs at indices: [1, 41, 61, 88]</div><div>&quot;n&quot; occurs at indices: [19, 23, 34, 105]</div><div>&quot;m&quot; occurs at indices: [59, 86, 99]</div><div>&quot;c&quot; occurs at indices: [30, 83, 84]</div><div>&quot;p&quot; occurs at indices: [60, 87]</div><div>&quot;w&quot; occurs at indices: [43, 75]</div><div>&quot;y&quot; occurs at indices: [37, 77]</div><div>&quot;b&quot; occurs at indices: [39, 68]</div><div>&quot;.&quot; occurs at indices: [44]</div><div>&quot;\n&quot; occurs at indices: [45]</div><div>&quot;I&quot; occurs at indices: [46]</div><div>&quot;x&quot; occurs at indices: [16]</div><div>&quot;?&quot; occurs at indices: [107]</div><div>&quot;g&quot; occurs at indices: [106]</div><div>&quot;D&quot; occurs at indices: [28]</div><div>&quot;P&quot; occurs at indices: [0]</div></div><div>*/</div><div><br></div></div>