通过定义的数组元素的子字符串从定义的范围返回子数组

我有一个排序的元素数组(唯一且不连续):

array= ["AAA", "BBB", "CCC", "DDD", "EEE"] 

我定义了一系列元素:

 range_1 = ("CC" .. "DD") range_2 = ("B" .. "E") 

元素的范围只是引用array元素的字符串,但仅限于starts_with? 对于这些元素是true的。 例:

 "C", "CC" and "CCC" in range - fits to "CCC" in array "D", "DD" and "DDD" in range - fits to "DDD" in array 

range_1range_2的预期结果如下:

 result_1 = ["CCC", "DDD"] result_2 = ["BBB", "CCC", "DDD", "EEE"] 

如何在Ruby中实现这一点?

其他方式:

 def git_em(array, range) array.select {|e| range.any? {|r| e.start_with? r}} end array= ["AAA", "BBB", "CCC", "DDD", "EEE"] range_1 = ("CC" .. "DD") range_2 = ("B" .. "E") git_em(array,range_1) # => ["CCC", "DDD"] git_em(array,range_2) # => ["BBB", "CCC", "DDD", "EEE"] 

这个概念与您之前的问题相同。

 array= ["AAA", "BBB", "CCC", "DDD", "EEE"] range_1 = ("CC" .. "DD") range_2 = ("B" .. "E") def subarray(array, range) from = range.first to = range.last idx_from = array.index{ |e| e.start_with?(from) } idx_to = array.index{ |e| e.start_with?(to) } array[idx_from..idx_to] end p subarray(array, range_1) #=> ["CCC", "DDD"] p subarray(array, range_2) #=> ["BBB", "CCC", "DDD", "EEE"]