map_function_interface.go 782 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import "fmt"
  3. type obj interface{}
  4. func main() {
  5. // define a generic lambda function mf:
  6. mf := func(i obj) obj {
  7. switch i.(type) {
  8. case int:
  9. return i.(int) * 2
  10. case string:
  11. return i.(string) + i.(string)
  12. }
  13. return i
  14. }
  15. isl := []obj{0, 1, 2, 3, 4, 5}
  16. res1 := mapFunc(mf, isl)
  17. for _, v := range res1 {
  18. fmt.Println(v)
  19. }
  20. println()
  21. ssl := []obj{"0", "1", "2", "3", "4", "5"}
  22. res2 := mapFunc(mf, ssl)
  23. for _, v := range res2 {
  24. fmt.Println(v)
  25. }
  26. }
  27. func mapFunc(mf func(obj) obj, list []obj) []obj {
  28. result := make([]obj, len(list))
  29. for ix, v := range list {
  30. result[ix] = mf(v)
  31. }
  32. // Equivalent:
  33. /*
  34. for ix := 0; ix<len(list); ix++ {
  35. result[ix] = mf(list[ix])
  36. }
  37. */
  38. return result
  39. }
  40. /* Output:
  41. 0
  42. 2
  43. 4
  44. 6
  45. 8
  46. 10
  47. 00
  48. 11
  49. 22
  50. 33
  51. 44
  52. 55
  53. */