2013-11-01 41 views
1

我有元素的排序陣列(獨特和不連續的)的子串從定義範圍返回子陣列:由下式定義的數組元素

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中?

+0

你知道''start_with已經?那麼,你的代碼在哪裏? –

+0

詢問代碼的問題必須證明對正在解決的問題有最小的理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。 –

+0

我知道'start_with?'從這裏http://ruby-doc.org/core-2.0.0/String.html#method-i-start_with-3F – flyer

回答

3

另一種方式:

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"] 
1

的概念是一樣的,你前面的問題的。

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"]