Flatten flattens slice with one level. Play: https://go.dev/play/p/hYa3cBEevtm
(slice any)
| 473 | // Flatten flattens slice with one level. |
| 474 | // Play: https://go.dev/play/p/hYa3cBEevtm |
| 475 | func Flatten(slice any) any { |
| 476 | sv := reflect.ValueOf(slice) |
| 477 | if sv.Kind() != reflect.Slice { |
| 478 | panic("Flatten: input must be a slice") |
| 479 | } |
| 480 | |
| 481 | elemType := sv.Type().Elem() |
| 482 | if elemType.Kind() == reflect.Slice { |
| 483 | elemType = elemType.Elem() |
| 484 | } |
| 485 | |
| 486 | result := reflect.MakeSlice(reflect.SliceOf(elemType), 0, sv.Len()) |
| 487 | |
| 488 | for i := 0; i < sv.Len(); i++ { |
| 489 | item := sv.Index(i) |
| 490 | if item.Kind() == reflect.Slice { |
| 491 | for j := 0; j < item.Len(); j++ { |
| 492 | result = reflect.Append(result, item.Index(j)) |
| 493 | } |
| 494 | } else { |
| 495 | result = reflect.Append(result, item) |
| 496 | } |
| 497 | } |
| 498 | |
| 499 | return result.Interface() |
| 500 | } |
| 501 | |
| 502 | // FlattenDeep flattens slice recursive. |
| 503 | // Play: https://go.dev/play/p/yjYNHPyCFaF |
searching dependent graphs…