underscore/docs/content/collections/unzip.md
Ruidy bcb4dd1e9d
docs: add documentation for new collection functions
Add comprehensive documentation for all new functions:
- TakeWhile: take elements while predicate is true
- DropWhile: drop elements while predicate is true
- Scan: running accumulator (prefix scan)
- First/FirstN: get first element(s) safely
- Init: all but last element
- Intersperse: insert separator between elements
- Sliding: sliding window views
- FoldRight: right-to-left fold/reduce
- Tap: side effects without mutation
- Transpose: flip matrix rows/columns
- Unzip: split tuples into separate slices
- ParallelReduce: parallel reduction (experimental)
- Replicate: create n copies of a value

Each doc includes:
- Clear description
- Code examples with output
- Common use cases
- Edge case handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 08:48:38 +01:00

965 B

title date
Unzip 2025-01-16T00:00:00-00:00

Unzip splits a slice of tuples into two separate slices. The inverse operation of Zip. Useful for separating paired data.

package main

import (
	"fmt"
	u "github.com/rjNemo/underscore"
)

func main() {
	// Basic usage
	pairs := []u.Tuple[int, string]{
		{Left: 1, Right: "a"},
		{Left: 2, Right: "b"},
		{Left: 3, Right: "c"},
	}

	nums, letters := u.Unzip(pairs)
	fmt.Println(nums)    // [1, 2, 3]
	fmt.Println(letters) // ["a", "b", "c"]

	// Use case: separating keys and values
	keyValuePairs := []u.Tuple[string, int]{
		{Left: "apple", Right: 5},
		{Left: "banana", Right: 3},
		{Left: "cherry", Right: 8},
	}

	items, counts := u.Unzip(keyValuePairs)
	fmt.Println("Items:", items)   // Items: [apple banana cherry]
	fmt.Println("Counts:", counts) // Counts: [5 3 8]

	// Empty slice
	emptyNums, emptyStrs := u.Unzip([]u.Tuple[int, string]{})
	fmt.Println(emptyNums, emptyStrs) // [] []
}