Decorate-sort-undecorate idiom: Difference between revisions

Added Go
m (rust example)
(Added Go)
Line 258:
 
[[File:Fōrmulæ - Decorate-sort-undecorate idiom 05.png]]
 
=={{header|Go}}==
Go needs to use a temporary slice for the decoration part.
<syntaxhighlight lang="go">package main
 
import (
"fmt"
"sort"
)
 
type wordkey struct {
word string
key int
}
 
func sortWords(words []string, f func(s string) int) {
var le = len(words)
 
// decorate
wordkeys := make([]wordkey, le)
for i := 0; i < le; i++ {
wordkeys[i] = wordkey{words[i], f(words[i])}
}
 
// sort (stable)
sort.SliceStable(wordkeys, func(i, j int) bool {
return wordkeys[i].key < wordkeys[j].key
})
 
// undecorate (mutates original slice)
for i := 0; i < le; i++ {
words[i] = "\"" + wordkeys[i].word + "\""
}
 
fmt.Println(words)
}
 
func main() {
words := []string{"Rosetta", "Code", "is", "a", "programming", "chrestomathy", "site"}
length := func(s string) int { return len(s) }
sortWords(words, length)
}</syntaxhighlight>
 
{{out}}
<pre>
["a" "is" "Code" "site" "Rosetta" "programming" "chrestomathy"]
</pre>
 
=={{header|Haskell}}==
9,490

edits