HackerRank Ruby Array – Selection problem solution YASH PAL, 31 July 2024 In this HackerRank Ruby Array – Selection problem solution The array class also allows to selection and return a subset of an array based on some criteria defined in a block (a block is a group of code within {} that accepts a variable and returns a value). Selecting elements that satisfy a given criteria Rejecting elements that satisfy a given criteria > arr = [3, 4, 2, 1, 2, 3, 4, 5, 6] > arr.select {|a| a > 2} => [3, 4, 3, 4, 5, 6] > arr.reject {|a| a > 2} => [2, 1, 2] > arr => [3, 4, 2, 1, 2, 3, 4, 5, 6] > arr.drop_while {|a| a > 1} # removes elements till the block returns false for the first time => [1, 2, 3, 4, 5, 6] As you can see, the original array remains unchanged. This is called Non-Destructive Selection. For destructive behavior (change to the original array), Ruby provides the following methods: > arr = [3, 4, 2, 1, 2, 3, 4, 5, 6] > arr.delete_if {|a| a < 2} => [3, 4, 2, 2, 3, 4, 5, 6] > arr.keep_if {|a| a < 4} => [3, 2, 2, 3] Note An element in a block is selected, rejected, deleted, or kept based on the True or False value generated by that block on that element. For a destructive behavior for select and reject or any method that one wants to enforce a change in the original array, a ! can be used at the end of the method i.e., select! and reject! In this challenge, you have to complete the functions using syntax as explained above. Problem solution. def select_arr(arr) # select and return all odd numbers from the Array variable `arr` arr.select do |n| n.odd? end end def reject_arr(arr) # reject all elements which are divisible by 3 arr.reject do |n| n % 3 == 0 end end def delete_arr(arr) arr.delete_if do |n| n < 0 end # delete all negative elements end def keep_arr(arr) arr.keep_if { |n| n >= 0 } # keep all non negative elements ( >= 0) end coding problems ruby