Skip to content

Data Transform

Source: examples/data_transform.ion in the repo.

// Data transformation pipeline
let users = [
#{name: "Alice", age: 30, role: "admin"},
#{name: "Bob", age: 25, role: "user"},
#{name: "Charlie", age: 35, role: "admin"},
#{name: "Diana", age: 28, role: "user"},
#{name: "Eve", age: 22, role: "admin"},
];
// Filter admins and format their names
let admin_names = users
.filter(|u| u.role == "admin")
.map(|u| u.name);
io::println(f"Admins: {admin_names}");
// Average age using reduce
let total_age = users.map(|u| u.age).reduce(|a, b| a + b);
let avg_age = total_age / users.len();
io::println(f"Average age: {avg_age}");
// Unique roles using set
let unique_roles = set(users.map(|u| u.role));
io::println(f"Roles: {unique_roles}");
// Age statistics using min/max/sum
let ages = users.map(|u| u.age);
io::println(f"Youngest: {ages.min()}");
io::println(f"Oldest: {ages.max()}");
io::println(f"Total age: {ages.sum()}");
// Chunk users into groups of 2
let groups = users.chunk(2);
for (i, group) in enumerate(groups) {
let names = group.map(|u| u.name).join(", ");
io::println(f"Group {i + 1}: {names}");
}
// Sort by age
let by_age = users
.sort_by(|a, b| a.age - b.age)
.map(|u| f"{u.name} ({u.age})");
io::println(f"By age: {by_age.join(", ")}");
// Create summary report
let report = #{
total_users: users.len(),
admin_count: users.filter(|u| u.role == "admin").len(),
average_age: avg_age,
oldest: ages.max(),
youngest: ages.min(),
};
io::println(f"Report: {json::pretty(report)}");

Documentation reflects Ion v0.2.0-66-g3faa376.