Back to Mruby

mruby-array-ext

mrbgems/mruby-array-ext/README.md

4.0.05.0 KB
Original Source

mruby-array-ext

This mrbgem extends the Array class in mruby, providing a rich set of additional methods for array manipulation. These extensions enhance mruby's built-in array capabilities, offering functionalities commonly found in standard Ruby.

Functionality

The mruby-array-ext gem adds the following methods to the Array class:

Set Operations

  • uniq: Returns a new array by removing duplicate values.
  • uniq!: Removes duplicate elements from self. Returns nil if no changes are made.
  • - (difference): Returns a new array that is a copy of the original array, removing any items that also appear in another array.
  • | (union): Returns a new array by joining this array with another array, removing duplicates.
  • & (intersection): Returns a new array containing elements common to two arrays, with no duplicates.
  • difference: Returns a new array that is a copy of the original array, removing all occurrences of any item that also appear in the specified other arrays.
  • union: Returns a new array by joining this array with other arrays, removing duplicates.
  • intersection: Returns a new array containing elements common to this array and specified other arrays, removing duplicates.
  • intersect?: Returns true if the array and another array have at least one element in common.

Element Manipulation and Access

  • flatten: Returns a new array that is a one-dimensional flattening of self.
  • flatten!: Flattens self in place. Returns nil if no modifications were made.
  • fetch: Tries to return the element at a given position. Throws an IndexError if the index is out of bounds, unless a default value or block is provided.
  • fill: Sets selected elements of self to a given object or the result of a block.
  • compact: Returns a copy of self with all nil elements removed.
  • compact!: Removes nil elements from self. Returns nil if no changes were made.
  • rotate(count=1): Returns a new array by rotating self so that the element at count is the first element.
  • rotate!(count=1): Rotates self in place.
  • insert(index, obj...): Inserts the given values before the element with the given index.
  • slice!(index) / slice!(start, length) / slice!(range): Deletes element(s) given by an index or range and returns the deleted object(s).
  • at(index): Returns the element at index. Returns nil if the index is out of range.
  • dig(idx, ...): Extracts a nested value specified by a sequence of indices.
  • fetch_values(idx, ...): Returns an array containing the values associated with the given indexes. Raises IndexError if an index is not found, unless a block is provided.
  • values_at(selector, ...): Returns an array containing the elements corresponding to the given selector(s).

Searching and Comparison

  • assoc(obj): Searches through an array of arrays, comparing obj with the first element of each contained array. Returns the first matching contained array or nil.
  • rassoc(obj): Searches through an array of arrays, comparing obj with the second element of each contained array. Returns the first matching contained array or nil.
  • bsearch { |x| block }: Finds a value from the array which meets the given condition using binary search.
  • bsearch_index { |x| block }: Finds the index of a value from the array which meets the given condition using binary search.

Iterators and Combinatorics

  • reverse_each: Calls the given block for each element in reverse order.
  • permutation(n=self.size): Yields all permutations of length n of the elements of the array.
  • combination(n): Yields all combinations of length n of elements from the array.
  • product(*arys): Returns an array of all combinations of elements from self and the given arrays.
  • repeated_combination(n): Yields all repeated combinations of length n.
  • repeated_permutation(n): Yields all repeated permutations of length n.

Conversions and Other Utilities

  • to_h: Returns the result of interpreting the array as an array of [key, value] pairs.
  • transpose: Assumes that self is an array of arrays and transposes the rows and columns.

Filtering

  • delete_if { |item| block }: Deletes every element of self for which the block evaluates to true.
  • reject! { |item| block }: Equivalent to delete_if, but returns nil if no changes were made.
  • keep_if { |item| block }: Deletes every element of self for which the given block evaluates to false.
  • select! { |item| block }: Deletes elements for which the block returns a false value. Returns self if changes were made, otherwise nil.

Aliases

  • append (alias for push)
  • prepend (alias for unshift)
  • filter! (alias for select!)

Usage

To use this gem, add it to your build_config.rb or mrbgem.rake file. For detailed examples of each method, please refer to the comments in the source code (mrblib/array.rb and src/array.c).

Example:

ruby
a = [1, 2, 2, 3, nil, 4]
p a.compact #=> [1, 2, 2, 3, 4]
p a.uniq    #=> [1, 2, 3, nil, 4]

b = ["a", "b", "c"]
p b.rotate #=> ["b", "c", "a"]

This gem is part of the mruby project.