<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I’ve seen the WWDC 2016 Keynote and State of the Platforms videos. &nbsp;I haven’t seen any others so I don’t spoil myself before typing my ideas down. &nbsp;Apologies if this has already been covered.</div><div class=""><br class=""></div><div class="">I saw that the “PermutationGenerator” type is being retired in Swift 3. &nbsp;It inspired me to see how I can implement such a type:</div><div class=""><br class=""></div><div class="">//=====</div>/// Permutations generator, adapted from a Java class that mentioned its source as &lt;<a href="http://www.cut-the-knot.org/Curriculum/Combinatorics/JohnsonTrotter.shtml" class="">http://www.cut-the-knot.org/Curriculum/Combinatorics/JohnsonTrotter.shtml</a>&gt;.&nbsp;&nbsp;Inspired by checking that Swift 3 will not have/retain such a type.<br class="">struct&nbsp;PermutationsGenerator&lt;Index: ForwardIndexType&gt;:&nbsp;GeneratorType&nbsp;{<br class=""><br class="">&nbsp; &nbsp;&nbsp;/// postconditions: The first `self.next` returns an array of the indices in order.<br class="">&nbsp; &nbsp;&nbsp;init(indices:&nbsp;Range&lt;Index&gt;)<br class=""><br class=""><div class="">&nbsp; &nbsp; mutating&nbsp;func&nbsp;next() -&gt; [Index]?<br class=""><br class="">}<br class="">//=====</div><div class=""><br class=""></div><div class="">Use like:</div><div class=""><br class=""></div><div class="">//=====</div><div class="">func doSomething&lt;C: CollectionType&gt;(collection: C) {</div><div class="">&nbsp; &nbsp; var g = PermutationsGenerator(collection.indices)</div><div class="">&nbsp; &nbsp; while let p = g.next() {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; doSomethingToo(p.map { collection[$0] })</div><div class="">&nbsp; &nbsp; }</div><div class="">}</div><div class="">//=====</div><div class=""><br class="">So the first call to “next” returns “Array(indices)” and subsequent calls return scrambled versions of that array. &nbsp;There will be “factorial(indices.count)” versions returned. &nbsp;(For an empty range or one with one valid element, there will be only 0! == 1! == 1 valid return.)</div><div class=""><br class=""></div><div class="">Then I looked further. &nbsp;This is NOT what the existing “PermutationGenerator” does. &nbsp;In fact, the type is being retired for this very reason. &nbsp;The type actually returns a subset of collection, possibly in a scrambled order (i.e. a permutation). &nbsp;Some questions:</div><div class=""><br class=""></div><div class="">1. Is the functionality of the existing “PermutationGenerator” being moved to another type?</div><div class="">2. Would my type be suitable to add to the standard library? &nbsp;Would the name need to be changed? &nbsp;(The name is appropriate, but it’s just one letter different from a depreciated type.)<br class=""><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">—&nbsp;</div><div class="">Daryle Walker<br class="">Mac, Internet, and Video Game Junkie<br class="">darylew AT mac DOT com&nbsp;</div></div>
</div>
<br class=""></div></body></html>