> On 24 Apr 2016, at 17:41, Xiaodi Wu <[email protected]> wrote:
> 
> Regarding how this affects sorting methods though, some people (myself 
> included) like the simplicity of being able to do the following:
> 
>       myArray.sort(>) // If array is of Comparable elements, just throw in 
> the operator
> 
> While for less-than you could just pass in the new operator instead, is there 
> an easy way to flip the operator to achieve a similar result?
> 
> What's wrong with reverse()?

Nothing in that specific case I suppose, but in similar cases that don’t return 
something that .reverse() can be used with it will be a bit more awkward to 
work with; in-place sorting would perhaps be a better example, as you can’t 
just expect everything the array is passed on to to call .reverse(), as they 
may not know what the order is supposed to be. This is where the full range of 
current comparison operators are useful. I considered that we could have two 
ordering operators such as <=< and >=> for ascending and descending 
respectively as drop-in replacements for < and >, but this wouldn’t help cases 
where <= and >= are used and I doubt we want yet more operators.

The enum could be given a raw type of Int with values of .Below (-1), .Same (0) 
and .Above (1), which would allow me to do: .sortInPlace({ $0 <=> $1 > 0 })
Though that feels a bit weird, like I should be testing against the actual enum 
cases, but doing so gets messy very quickly. Java uses an integer for sorting 
order, but then iirc their enum type came later so they might have used it if 
they’d had it, but their integer value has the added bonus that it can also 
optionally represent an estimate of how far two elements are displaced from one 
another.

On which note actually, should the .Below and .After cases include a stored 
value to give an optional estimate of displacement? This needn’t actually be 
used, and for some types won’t be accurate enough to be useful (in which case 
it should just be 1), but in some cases it can be useful to provide and use 
when documented properly.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to