1use minarrow::traits::selection::{ColumnSelection, RowSelection};
2use minarrow::*;
3
4fn main() {
5 let table = create_sample_table();
7
8 println!("Original table:");
9 println!("{}\n", table);
10
11 println!("=== Table-specific API ===\n");
13
14 println!("table.c(&[\"name\", \"age\"]).r(1..4)");
15 let view1 = table.c(&["name", "age"]).r(1..4);
16 println!("{}\n", view1);
17
18 println!("table.c(&[0, 2]).r(&[0, 2, 4])");
19 let view2 = table.c(&[0, 2]).r(&[0, 2, 4]);
20 println!("{}\n", view2);
21
22 println!("table.c(0..2).r(0..5)");
23 let view3 = table.c(0..2).r(0..5);
24 println!("{}\n", view3);
25
26 println!("table.c(1).r(&[2, 4, 6])");
27 let view4 = table.c(1).r(&[2, 4, 6]);
28 println!("{}\n", view4);
29
30 println!("=== Aliases ===\n");
32
33 println!("table.f(&[\"id\", \"age\"]).d(0..3)");
34 let view5 = table.c(&["id", "age"]).r(0..3);
35 println!("{}\n", view5);
36
37 println!("table.fields(&[\"name\"]).data(1..5)");
38 let view6 = table.c(&["name"]).r(1..5);
39 println!("{}\n", view6);
40
41 println!("table.f(0..2).d(&[0, 3, 6, 9])");
42 let view7 = table.c(0..2).r(&[0, 3, 6, 9]);
43 println!("{}\n", view7);
44
45 println!("table.y(2).x(..5)");
46 let view8 = table.y(2).y(..5);
47 println!("{}\n", view8);
48
49 println!("table.fields(1..).data(5..)");
50 let view9 = table.c(1..).r(5..);
51 println!("{}\n", view9);
52
53 println!("=== Materialisation ===\n");
55
56 println!("table.f(&[\"name\", \"age\"]).d(0..3).to_table()");
57 let view = table.c(&["name", "age"]).r(0..3);
58 let materialised = view.to_table();
59 println!("{}\n", materialised);
60
61 println!("=== Array & FieldArray Selection ===\n");
63
64 let age_col = table.col(2).unwrap().clone();
66 println!("Age column (FieldArray):");
67 println!(" Field: {} ({})", age_col.field.name, age_col.arrow_type());
68 println!(" Length: {}", age_col.len());
69 println!(
70 " Values: {:?}\n",
71 (0..age_col.len())
72 .map(|i| age_col.array.inner::<IntegerArray<i32>>().get(i).unwrap())
73 .collect::<Vec<_>>()
74 );
75
76 println!("age_col.d(&[1, 3, 5, 7])");
78 let age_view = age_col.r(&[1, 3, 5, 7]);
79 println!(" View length: {}", age_view.len());
80 println!(
81 " Selected indices: {:?}\n",
82 (0..age_view.len())
83 .map(|i| age_view.get::<IntegerArray<i32>>(i).unwrap())
84 .collect::<Vec<_>>()
85 );
86
87 let id_array = Array::from_int32({
89 let mut arr = IntegerArray::<i32>::default();
90 for i in 0..10 {
91 arr.push(i * 10);
92 }
93 arr
94 });
95 let id_view = ArrayV::from(id_array);
96 println!("ArrayV:");
97 println!(" Length: {}", id_view.len());
98 println!(
99 " Values: {:?}\n",
100 (0..id_view.len())
101 .map(|i| id_view.get::<IntegerArray<i32>>(i).unwrap())
102 .collect::<Vec<_>>()
103 );
104
105 println!("id_view.data(0..5)");
107 let id_selected1 = id_view.select_rows(0..5);
108 println!(" Length: {}", id_selected1.len());
109 println!(
110 " Values: {:?}\n",
111 (0..id_selected1.len())
112 .map(|i| id_selected1.get::<IntegerArray<i32>>(i).unwrap())
113 .collect::<Vec<_>>()
114 );
115
116 println!("id_view.x(&[2, 4, 6, 8])");
117 let id_selected2 = id_view.y(&[2, 4, 6, 8]);
118 println!(" Length: {}", id_selected2.len());
119 println!(
120 " Values: {:?}",
121 (0..id_selected2.len())
122 .map(|i| id_selected2.get::<IntegerArray<i32>>(i).unwrap())
123 .collect::<Vec<_>>()
124 );
125}
126
127fn create_sample_table() -> Table {
128 let mut id_arr = IntegerArray::<i32>::default();
130 for i in 0..10 {
131 id_arr.push(i);
132 }
133
134 let mut name_arr = StringArray::<u32>::default();
136 let names = [
137 "Alice", "Bob", "Charlie", "Diana", "Eve", "Frank", "Grace", "Henry", "Iris", "Jack",
138 ];
139 for name in names {
140 name_arr.push(name.to_string());
141 }
142
143 let mut age_arr = IntegerArray::<i32>::default();
145 for i in 0..10 {
146 age_arr.push(20 + (i * 3) as i32);
147 }
148
149 let col_id = FieldArray::from_arr("id", Array::from_int32(id_arr));
150 let col_name = FieldArray::from_arr("name", Array::from_string32(name_arr));
151 let col_age = FieldArray::from_arr("age", Array::from_int32(age_arr));
152
153 Table::new("People".to_string(), Some(vec![col_id, col_name, col_age]))
154}