<div dir="ltr">On Tue, Aug 16, 2016 at 11:31 PM, Charlie Monroe <span dir="ltr">&lt;<a href="mailto:charlie@charliemonroe.net" target="_blank">charlie@charliemonroe.net</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>My original intention was to get rid of re-defining what should be the sequence sorted by. For example, if self.sorted { $0.age &lt; $1.age } was at 10 places in code, I would not consider it a good coding technique and would definitely suggest the person to create a method for this - sortedByAge().</div><div><br></div><div>self.sorted(.ascending) { $0.age } is a bit better, but I still feel that there is a lot of duplicate code and if one used this in 10 places over the project, a method for this should be created instead.</div><div><br></div><div>Don&#39;t you agree that people.sortedByAge() reads better than self.sorted(.ascending) { $0.age }?</div><div><br></div><div>What I was also aiming at is possibly something that could replace e.g. NSSortDescriptor, which can be handy in the UI, but requires dynamic (@objc) properties in order to work. </div><div><br></div><div>What I&#39;m suggesting, would also emit a function symbol for sorting the array by a particular key, so the sorting could actually be dynamic - supply a key (using #keyPath()) which is @sortable, given name mangling is stable in Swift 4, you can create the well-defined function symbol name, make a lookup via dyld and call it.</div><div><br></div><div>Note that the NSSortDescriptor is just an example and given most of my development is on macOS, I use bindings and NSArrayController where the sort descriptors are fairly common unlike with iOS... But the usage of this can be extended to many other areas given that you *know* that there is a function out there, with that particular signature that will sort the array...<div><div class="h5"><div><div><blockquote type="cite"><div></div></blockquote></div></div></div></div></div></div></blockquote><div><br></div><div>That does not strike me as a facility I would want. It seems like a lot of special code to generate a wrapper for a very specific single line of code.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><div class="h5"><div><div><blockquote type="cite"><div>On Aug 17, 2016, at 12:45 AM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 16, 2016 at 5:35 PM, Anton Zhilin <span dir="ltr">&lt;<a href="mailto:antonyzhilin@gmail.com" target="_blank">antonyzhilin@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What we need here is  sort_by  from Ruby. How about adding these overloads?<div><br></div><div><font face="monospace, monospace">func sort&lt;U: Comparable&gt;(by: (T) -&gt; U)</font></div><div><font face="monospace, monospace">func sorted&lt;U: Comparable&gt;(by: (T) -&gt; U) -&gt; [T]</font></div></div>
</blockquote></div><br></div><div class="gmail_extra">I&#39;d be in favor. We&#39;d need another name, since the current closure predicate is already standardized to `by:`.</div><div class="gmail_extra">(Or, as I propose above, once `Ordering` comes to the stdlib, we can just have it as `func sort&lt;U: Comparable&gt;(_ ordering: Ordering, by: (T) -&gt; U)`, called like `sort(.ascending) { $0.age }`.)</div><div class="gmail_extra"><br></div></div>
</div></blockquote></div><br></div></div></div></div></div></blockquote></div><br></div></div>