min_interface.go 727 B

123456789101112131415161718192021222324252627282930
  1. // min_interface.go
  2. package min
  3. type Miner interface {
  4. Len() int
  5. ElemIx(ix int) interface{}
  6. Less(i, j int) bool
  7. }
  8. func Min(data Miner) interface{} {
  9. min := data.ElemIx(0)
  10. for i := 1; i < data.Len(); i++ {
  11. if data.Less(i, i-1) {
  12. min = data.ElemIx(i)
  13. }
  14. }
  15. return min
  16. }
  17. type IntArray []int
  18. func (p IntArray) Len() int { return len(p) }
  19. func (p IntArray) ElemIx(ix int) interface{} { return p[ix] }
  20. func (p IntArray) Less(i, j int) bool { return p[i] < p[j] }
  21. type StringArray []string
  22. func (p StringArray) Len() int { return len(p) }
  23. func (p StringArray) ElemIx(ix int) interface{} { return p[ix] }
  24. func (p StringArray) Less(i, j int) bool { return p[i] < p[j] }