<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">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 class=""><br class=""></div><div class="">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 class=""><br class=""></div><div class="">Don't you agree that people.sortedByAge() reads better than self.sorted(.ascending) { $0.age }?</div><div class=""><br class=""></div><div class="">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.&nbsp;</div><div class=""><br class=""></div><div class="">What I'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 class=""><br class=""></div><div class="">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...<br class=""><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Aug 17, 2016, at 12:45 AM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 16, 2016 at 5:35 PM, Anton Zhilin <span dir="ltr" class="">&lt;<a href="mailto:antonyzhilin@gmail.com" target="_blank" class="">antonyzhilin@gmail.com</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">What we need here is &nbsp;sort_by &nbsp;from Ruby. How about adding these overloads?<div class=""><br class=""></div><div class=""><font face="monospace, monospace" class="">func sort&lt;U: Comparable&gt;(by: (T) -&gt; U)</font></div><div class=""><font face="monospace, monospace" class="">func sorted&lt;U: Comparable&gt;(by: (T) -&gt; U) -&gt; [T]</font></div></div>
</blockquote></div><br class=""></div><div class="gmail_extra">I'd be in favor. We'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 class=""></div></div>
</div></blockquote></div><br class=""></div></div></body></html>