/// @module std::core::array_iterable
/// Iterable implementation for Array (Vec<T>).
///
/// Most methods now have pure Shape implementations.
/// Pure Shape fallbacks for methods without native dispatch.
impl Iterable for Array {
method findIndex(predicate) {
for i in 0..self.len() {
if predicate(self[i]) { return i }
}
-1
}
method zip(other) {
let result = [];
let n = if self.len() < other.len() { self.len() } else { other.len() };
let i = 0;
while i < n {
result.push([self[i], other[i]]);
i = i + 1;
}
result
}
method chunk(size) {
let result = [];
let i = 0;
while i < self.len() {
result.push(self.slice(i, i + size));
i = i + size;
}
result
}
method flatten() {
let mut result = []
for item in self {
for sub in item { result.push(sub) }
}
result
}
method slice(start, end) {
let mut result = []
let mut i = start
while i < end && i < self.len() {
result.push(self[i])
i = i + 1
}
result
}
method join(separator) {
let mut result = ""
for i in 0..self.len() {
if i > 0 { result = result + separator }
result = result + self[i].toString()
}
result
}
method sortBy(key_fn) {
self.sort(|a, b| {
let ka = key_fn(a);
let kb = key_fn(b);
if ka < kb { -1 }
else if ka > kb { 1 }
else { 0 }
})
}
method take(n) { self.slice(0, n) }
method skip(n) { self.slice(n, self.len()) }
method enumerate() {
let result = [];
let i = 0;
while i < self.len() {
result.push({ index: i, value: self[i] });
i = i + 1;
}
result
}
}