As itinerary and the reslicing operation use the same backing array, you 
could just offset your indexes:
https://play.golang.org/p/2ZzKST5J1g

I'm not sure if it's a good idea, could the sort.Slice implementation 
change in the future and make a regression?

Le mercredi 8 mars 2017 18:22:48 UTC+1, Ain a écrit :
>
>
> Another, OO-ish fix is to use method on custom type (
> https://play.golang.org/p/a5S5rNog5h):
>
> type itinerary []string
>
> func (t itinerary) sort() {
>     sort.Slice(t, func(i, j int) bool {
>         return t[i] < t[j]
>     })
> }
>
> func main() {
>     itinerary := itinerary{"Philadelphia", "Chicago", "Boston", "Austin"}
>     itinerary[1:].sort()
>     fmt.Println("My new itinerary is", itinerary)
> }
>
>
> ain
>
>
> On Wednesday, March 8, 2017 at 5:01:08 PM UTC+2, Val wrote:
>>
>> Sorry for not elaborating in the first place (I was trying to make the 
>> point very concise).
>>
>> This is the starting city :  Philadelphia
>>
>> This are the other cities :   Chicago, Boston, Austin
>>
>> The itinerary is the concatenation of starting city + other cities to be 
>> visited :   [Philadelphia, Chicago, Boston, Austin]
>>
>> In this contrived example the first city is fixed, because this is where 
>> I am now, wherever I decide to go next. That's why I decide to reorder all 
>> cities of my itinerary except the first one.
>>
>> This is what my naive code what trying to achieve (expected value of 
>> slice itinerary after partial sort) : [Philadelphia Austin Boston Chicago]
>>
>> This is what the code actually produces (value of slice itinerary after 
>> partial sort) : [Philadelphia Boston Chicago Austin] , which is why i say 
>> it is broken : the last 3 items don't end up in alphabetical order like I 
>> expected them to be.
>>
>> In a real program, there would be various legit reasons to sort only part 
>> of a slice, and the items would not always have a builtin type like string, 
>> rather custom struct types.
>>
>> @CBanning  Thanks, I had not thought of StringSlice!  But it's not 
>> applicable in my real programs, which deal with custom struct types (not 
>> strings).
>>
>> @David  Sorting the whole slice is not what I was trying to achieve, 
>> because I can't change my starting point.
>>
>> The bug in my code is that the two arguments I pass to sort.Slice are 
>> inconsistent : the portion to be sorted is a reslicing from itinerary, 
>> while the "less" closure indexes items of the whole itinerary.
>>
>> I brought up the "go vet" idea because I feel that whenever someone will 
>> do some reslicing directly in the first argument,
>> - either the result will be "broken" like mine,
>> - or the code in the less function will have to refer to the same 
>> (unnamed) resliced portion, which is imo convoluted : fix 1 
>> <https://play.golang.org/p/v0V8BQuJ_m> or fix 2 
>> <https://play.golang.org/p/z_52IQAhY4> .
>>
>> The most readable alternative I can think of while still using sort.Slice 
>> is to reslice in a new variable prior to sorting : fix 3 
>> <https://play.golang.org/p/ZgHyGOLiQO> .
>>
>> Best regards
>> Val
>>
>> On Wednesday, March 8, 2017 at 3:25:48 PM UTC+1, David Peacock wrote:
>>>
>>> On Wed, Mar 8, 2017 at 8:32 AM, Valentin Deleplace <dele...@gmail.com> 
>>> wrote:
>>>
>>>> I did explain the expected result : "and I want to visit other cities 
>>>> in alphabetical order"
>>>>
>>>
>>> Jan is correct; the characterization of a problem hinges on accurately 
>>> describing what you expect and what happened instead.  Terms such as 
>>> "broken" and "does not work" are best avoided because others don't know 
>>> what your definitions are for these in the given context. :-)
>>>
>>> That being said, your alphabetical order is returned as you intend if 
>>> you adjust line 17 thusly:
>>>
>>> sort.Slice(itinerary[:], func(i, j int) bool {
>>>
>>> Cheers,
>>> David
>>>  
>>>
>>>>
>>>> Le 8 mars 2017 2:16 PM, "Jan Mercl" <0xj...@gmail.com> a écrit :
>>>>
>>>>> On Wed, Mar 8, 2017 at 2:10 PM Val <dele...@gmail.com> wrote:
>>>>>
>>>>> > What do you think?
>>>>>
>>>>> You should explain what you've expected to get instead of what you've 
>>>>> got. Without that, I for one, cannot figure out what you see as broken 
>>>>> and 
>>>>> I have no idea why do you think it's not a good idea to sort a slice of a 
>>>>> slice. After all, it's just a slice as any other.
>>>>>
>>>>> -- 
>>>>>
>>>>> -j
>>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to golang-nuts...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to