12月20日のブログでは、次のようなコードを書いた。
type Sequence []int
func (s Sequence) String() string {
sort.Sort(s);
str := "[";
for i, elem := range s {
if i > 0 {
str += " "
}
str += fmt.Sprint(elem)
}
return str + "]"
}
しかし、実はSequence型を[]int型に変換すると、このメソッドを簡潔に書くことができる。(コード1参照)
func (s Sequence) String() string {
sort.Sort(s);
return fmt.Sprint([]int(s))
}
さらに、ソートする前にSequence型をsort.IntArray型に変換すると、sort.IntArray型が、
- Len() int
- Less(i, j int) bool
- Swap(i, j int)
を実装しているので、Sequence型はそれらのインタフェースを実装する必要もなくなり、コードが簡単になる。(コード2参照)
func (s Sequence) String() string {
sort.IntArray(s).Sort();
return fmt.Sprint([]int(s))
}
★WOZ★

にほんブログ村
//コード1ここから
package main
import (
"sort";
"fmt"
)
type Sequence []int
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s Sequence) String() string {
sort.Sort(s);
return fmt.Sprint([]int(s))
}
func main() {
var seq Sequence = &[...]int{5, 2, 1, 3, 4};
str := seq.String();
println(str);
}
//ここまで
//コード2ここから
package main
import (
"sort";
"fmt"
)
type Sequence []int
func (s Sequence) String() string {
sort.IntArray(s).Sort();
return fmt.Sprint([]int(s))
}
func main() {
var seq Sequence = &[...]int{5, 2, 1, 3, 4};
str := seq.String();
println(str);
}
//ここまで
最近のコメント