Arrays - Feature 13/41

Arrays store ordered collections of values. They're the most common data structure in Ruchy.

Creating Arrays

let numbers = [1, 2, 3, 4, 5]
let fruits = ["apple", "banana", "cherry"]
let empty = []
let mixed = [1, "two", 3.0, true]

Test Coverage: ✅ tests/lang_comp/data_structures/arrays.rs

Try It in the Notebook

let scores = [85, 92, 78, 95, 88]
scores  // Returns: [85, 92, 78, 95, 88]

Expected Output: [85, 92, 78, 95, 88]

Accessing Elements

Use square brackets with zero-based index:

let fruits = ["apple", "banana", "cherry"]

fruits[0]  // Returns: "apple"
fruits[1]  // Returns: "banana"
fruits[2]  // Returns: "cherry"

Expected Output: "apple", "banana", "cherry"

Negative Indices

fruits[-1]  // Returns: "cherry" (last item)
fruits[-2]  // Returns: "banana" (second to last)

Array Methods

len() - Length

let nums = [1, 2, 3, 4, 5]
nums.len()  // Returns: 5

Expected Output: 5

push() - Add to End

let arr = [1, 2, 3]
arr.push(4)
arr  // Returns: [1, 2, 3, 4]

Expected Output: [1, 2, 3, 4]

pop() - Remove from End

let arr = [1, 2, 3, 4]
let last = arr.pop()

last  // Returns: 4
arr   // Returns: [1, 2, 3]

Expected Output: 4, [1, 2, 3]

append() - Combine Arrays

let a = [1, 2]
let b = [3, 4]
a.append(b)
a  // Returns: [1, 2, 3, 4]

Expected Output: [1, 2, 3, 4]

contains() - Check Membership

let nums = [1, 2, 3, 4, 5]
nums.contains(3)  // Returns: true
nums.contains(10) // Returns: false

Expected Output: true, false

Iteration

For Loop

let numbers = [1, 2, 3, 4, 5]
let sum = 0

for n in numbers {
  sum = sum + n
}

sum  // Returns: 15

Expected Output: 15

With Index

let items = ["a", "b", "c"]

for (i, item) in items.enumerate() {
  print(f"{i}: {item}")
}
// Prints: 0: a, 1: b, 2: c

Common Patterns

Sum

let numbers = [10, 20, 30, 40, 50]
let total = 0

for n in numbers {
  total = total + n
}

total  // Returns: 150

Filter

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evens = []

for n in numbers {
  if n % 2 == 0 {
    evens.push(n)
  }
}

evens  // Returns: [2, 4, 6, 8, 10]

Map

let numbers = [1, 2, 3, 4, 5]
let doubled = []

for n in numbers {
  doubled.push(n * 2)
}

doubled  // Returns: [2, 4, 6, 8, 10]

Find

let numbers = [5, 12, 8, 130, 44]
let found = null

for n in numbers {
  if n > 100 {
    found = n
    break
  }
}

found  // Returns: 130

Slicing

let arr = [0, 1, 2, 3, 4, 5]

arr[1..4]   // Returns: [1, 2, 3] (exclusive)
arr[1..=4]  // Returns: [1, 2, 3, 4] (inclusive)
arr[..3]    // Returns: [0, 1, 2] (from start)
arr[3..]    // Returns: [3, 4, 5] (to end)

Multi-Dimensional Arrays

let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

matrix[0][0]  // Returns: 1
matrix[1][2]  // Returns: 6
matrix[2][1]  // Returns: 8

Iterate Matrix

let matrix = [[1, 2], [3, 4]]
let sum = 0

for row in matrix {
  for value in row {
    sum = sum + value
  }
}

sum  // Returns: 10

Array Comparison

[1, 2, 3] == [1, 2, 3]  // Returns: true
[1, 2, 3] == [1, 2, 4]  // Returns: false

Best Practices

✅ Use Descriptive Names

let scores = [85, 92, 78]      // Good
let arr = [85, 92, 78]         // Bad

✅ Check Length Before Access

if arr.len() > 0 {
  let first = arr[0]
}

Summary

Feature Status: WORKING ✅ Test Coverage: 100% ✅ Mutation Score: 95%

Arrays are ordered collections with zero-based indexing. Use them for lists of similar items.

Key Takeaways:

  • Zero-based indexing
  • Methods: len(), push(), pop(), append(), contains()
  • Iterate with for loops
  • Slicing with [start..end]
  • Can be multi-dimensional

← Previous: Function Definitions | Next: Tuples →