mrbgems/mruby-array-ext/README.md
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.
The mruby-array-ext gem adds the following methods to the Array class:
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.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).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.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.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.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.append (alias for push)prepend (alias for unshift)filter! (alias for select!)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:
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.