<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi – yes, there are a couple of things you can do:<div class=""><br class=""></div><div class="">You don’t have to rely on&nbsp;ExpressibleByArrayLiteral. RangeReplaceableCollection guarantees an empty init, so instead of [], you can write Value().</div><div class=""><br class=""></div><div class="">And the new 4.0 subscript that takes a default value allows you do avoid the if d[k] == nil dance for the initial value.</div><div class=""><br class=""></div><div class="">So you can write this as:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">extension</span> <span style="color: #703daa" class="">Dictionary</span> <span style="color: #ba2da2" class="">where</span> Value: RangeReplaceableCollection {</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">&nbsp; &nbsp; <span style="color: #ba2da2" class="">mutating</span> <span style="color: #ba2da2" class="">func</span> append(value: <span style="color: #703daa" class="">Value</span>.<span style="color: #703daa" class="">Element</span>, for key: <span style="color: #703daa" class="">Key</span>) {</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ba2da2" class="">self</span>[key, default: <span style="color: #703daa" class="">Value</span>()].<span style="color: #3e1e81" class="">append</span>(value)</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">&nbsp; &nbsp; }</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">}</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Jun 15, 2017, at 3:12 PM, Jens Persson via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">let question = """</div><div class="">&nbsp; &nbsp; Please see the extension to Dictionary below.</div><div class="">&nbsp; &nbsp; Is there a simpler or better way to accomplish the same thing?</div><div class="">&nbsp; &nbsp; """</div><div class="">extension Dictionary where</div><div class="">&nbsp; &nbsp; Value: RangeReplaceableCollection,</div><div class="">&nbsp; &nbsp; Value: ExpressibleByArrayLiteral,</div><div class="">&nbsp; &nbsp; Value.Element == Value.ArrayLiteralElement</div><div class="">{</div><div class="">&nbsp; &nbsp; mutating func append(value: Value.Element, for key: Key) {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; if self[key]?.append(value) == nil {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self[key] = [value]</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="">&nbsp; &nbsp; }</div><div class="">}</div><div class="">func usageExample() {</div><div class="">&nbsp; &nbsp; var characterIndexMap = [Character : [Int]]()</div><div class="">&nbsp; &nbsp; for (ci, c) in question.characters.enumerated() {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; characterIndexMap.append(value: ci, for: c)</div><div class="">&nbsp; &nbsp; }</div><div class="">&nbsp; &nbsp; for (character, indices) in characterIndexMap</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; .sorted(by: { $0.1.count &gt; $1.1.count })</div><div class="">&nbsp; &nbsp; {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; print("\(character.debugDescription) occurs at indices:", indices)</div><div class="">&nbsp; &nbsp; }</div><div class="">}</div><div class="">usageExample()</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">/* Will print:</div><div class=""><div class="">" " occurs at indices: [6, 10, 14, 24, 27, 38, 48, 54, 56, 64, 67, 74, 78, 81, 92, 96, 101]</div><div class="">"e" occurs at indices: [2, 5, 8, 9, 13, 15, 18, 40, 51, 53, 62, 69, 72, 95, 100]</div><div class="">"t" occurs at indices: [11, 17, 25, 31, 49, 70, 71, 79, 93, 102]</div><div class="">"s" occurs at indices: [4, 7, 20, 47, 57, 90, 97]</div><div class="">"o" occurs at indices: [22, 26, 33, 42, 65, 80, 85]</div><div class="">"i" occurs at indices: [21, 29, 32, 58, 89, 104]</div><div class="">"a" occurs at indices: [3, 35, 55, 76, 82, 98]</div><div class="">"h" occurs at indices: [12, 50, 91, 94, 103]</div><div class="">"r" occurs at indices: [36, 52, 63, 66, 73]</div><div class="">"l" occurs at indices: [1, 41, 61, 88]</div><div class="">"n" occurs at indices: [19, 23, 34, 105]</div><div class="">"m" occurs at indices: [59, 86, 99]</div><div class="">"c" occurs at indices: [30, 83, 84]</div><div class="">"p" occurs at indices: [60, 87]</div><div class="">"w" occurs at indices: [43, 75]</div><div class="">"y" occurs at indices: [37, 77]</div><div class="">"b" occurs at indices: [39, 68]</div><div class="">"." occurs at indices: [44]</div><div class="">"\n" occurs at indices: [45]</div><div class="">"I" occurs at indices: [46]</div><div class="">"x" occurs at indices: [16]</div><div class="">"?" occurs at indices: [107]</div><div class="">"g" occurs at indices: [106]</div><div class="">"D" occurs at indices: [28]</div><div class="">"P" occurs at indices: [0]</div></div><div class="">*/</div><div class=""><br class=""></div></div>
_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></div></blockquote></div><br class=""></div></body></html>