Arrays
Extras
Imported from the upstream Vibescript examples at arrays/extras.vibe and runnable in the browser today.
Source
arrays/extras.vibe
# vibe: 0.2
def first_two(values)
values.first(2)
end
def last_three(values)
values.last(3)
end
def numeric_sum(values)
values.sum
end
def double_sum(values)
values.reduce(0) do |total, value|
total + (value * 2)
end
end
def push_and_pop(values, extra)
pushed = values.push(extra)
result = pushed.pop
{
array: result[:array],
popped: result[:popped]
}
end
def uniq_values(values)
values.uniq
end
def concat_values(first, second)
first + second
end
def subtract_values(first, second)
first - second
end
def include_value(values, value)
values.include?(value)
end
def first_match(values, threshold)
values.find do |value|
value > threshold
end
end
def first_match_index(values, threshold)
values.find_index do |value|
value > threshold
end
end
def count_value(values, value)
values.count(value)
end
def count_large(values, threshold)
values.count do |value|
value > threshold
end
end
def predicate_snapshot(values)
any_large = values.any? do |value|
value > 10
end
all_positive = values.all? do |value|
value > 0
end
none_negative = values.none? do |value|
value < 0
end
{
any_large: any_large,
all_positive: all_positive,
none_negative: none_negative
}
end
def sort_values(values)
values.sort
end
def sort_desc(values)
values.sort do |a, b|
b - a
end
end
def sort_words_by_length(words)
words.sort_by do |word|
word.length
end
end
def partition_even(values)
values.partition do |value|
value % 2 == 0
end
end
def group_by_status(players)
players.group_by do |player|
player[:status]
end
end
def tally_statuses(statuses)
statuses.tally
end
def chunk_values(values, size)
values.chunk(size)
end
def window_values(values, size)
values.window(size)
end
def group_by_stable_status(players)
players.group_by_stable do |player|
player[:status]
end
end
def run
values = [2, 4, 4, 7, 12, 15]
words = ["pear", "kiwi", "banana", "fig"]
players = [
{ name: "Ada", status: "active" },
{ name: "Lin", status: "inactive" },
{ name: "Sol", status: "active" }
]
{
first_two: first_two(values),
last_three: last_three(values),
numeric_sum: numeric_sum(values),
double_sum: double_sum(values),
push_and_pop: push_and_pop(values, 20),
uniq_values: uniq_values(values),
concat_values: concat_values([1, 2], [3, 4]),
subtract_values: subtract_values(values, [4, 15]),
include_value: include_value(values, 12),
first_match: first_match(values, 10),
first_match_index: first_match_index(values, 10),
count_value: count_value(values, 4),
count_large: count_large(values, 5),
predicate_snapshot: predicate_snapshot(values),
sort_values: sort_values([5, 2, 9, 1]),
sort_desc: sort_desc([5, 2, 9, 1]),
sort_words_by_length: sort_words_by_length(words),
partition_even: partition_even(values),
group_by_status: group_by_status(players),
tally_statuses: tally_statuses(["active", "active", "inactive"]),
chunk_values: chunk_values(values, 2),
window_values: window_values(values, 3),
group_by_stable_status: group_by_stable_status(players)
}
end
Output
Press run to execute run from this example.