2014-09-05 57 views
0
def get_firstArray 
    a = Array.new(5) 

    number =Array.new(5){ |index| index * 2 } 
    return print number 
    puts 
end 
def get_secondtArray 
    a = Array.new(4) 

    number =A rray.new(4){ |index| index * 3 } 
    return print number 
    puts 
end 
a = get_firstArray 
b = get_secondtArray 

def merge(a, b) 

    mer= a.concat b 
    return mer 
end 

輸出 [0,2,4,6,8] [0,3,6,9]合併到陣列中的紅寶石不工作

我需要像[0,0,2的輸出,3,4,6,6,8,9] 與排序

回答

2

a.concat(b)將永遠改變a

相反,你可以讓merge返回包含nil所以你你想要的a工會和b

def get_first_array 
    Array.new(5) {|index| index * 2 } 
end 

def get_second_array 
    Array.new(4) {|index| index * 3 } 
end 

def merge(a, b) 
    (a+b).sort 
end 

a = get_first_array # [0, 2, 4, 6, 8] 
b = get_second_array # [0, 3, 6, 9] 

c = merge(a, b)  # [0, 0, 2, 3, 4, 6, 6, 8, 9] 
+0

你們以爲的作品謝謝:) – Agha 2014-09-05 00:43:06

+1

很高興能幫助:) – br3nt 2014-09-05 00:44:25

+0

工作對我來說:)這個時候 – Agha 2014-11-09 00:11:08

1

print method返回一個新數組返回numberprint number。執行return後沒有任何內容,因此您可以在方法結束時刪除puts。方法自動返回最後一條語句的結果,因此您不需要returnnumber變量。你在方法中創建了兩次數組,所以我們可以擺脫第一個。您從不會調用merge方法,該方法也不需要return語句。方法名稱不是標準駱駝事件,即類似get_first_array的東西將與Ruby標準匹配。你從不排序合併的數組。把這些放在一起,你最終的東西,如:

def evens 
    Array.new(5) { |index| index * 2 } 
end 

def triples 
    Array.new(4) { |index| index * 3 } 
end 

e = evens 
t = triples 

def merge(a, b) 
    a.concat b 
end 
puts merge(e, t).sort 

作爲一個側面說明,這裏就是我會從頭開始寫這個(主要區別在於不使用方法的俏皮話:

evens = (0..4).map { |n| n * 2 } 
triples = (0..3).map { |n| n * 3 } 
puts (evens + triples).sort 
0
def get_first_array 
    Array.new(5) {|index| index * 2 } 
end 

def get_second_array 
    Array.new(4) {|index| index * 3 } 
end 

def merge(a, b) 
    (a+b).sort 
end 

a = get_first_array 
b = get_second_array 

c = merge(a, b) 

print c 
0

此問題歸結爲這樣一種方式,所得到的數組進行排序ab組合來分類的陣列中的一個。自然解決辦法是(a+b).sort,但是這是相對低效的,考慮到ab已經排序。合併兩個排序後的數組必須是一個相當普遍的要求,所以我想了一下如何有效地完成這個任務。我堅持的方式非常簡單(這有點令人失望);我不知道的算法可能會更好(或者至少更清晰)。順便提一下,我想了一下Enumerable#slice_before是否可以使用,但是空了。

def merge_sorted(a,b) 
    sa, sb = a.size, b.size 
    ia = ib = 0 
    c = [] 
    loop do 
    (return c + a[ia..-1]) if (ib == sb) 
    (return c + b[ib..-1]) if (ia == sa) 
    if a[ia] < b[ib] 
     c << a[ia] 
     ia += 1 
    else 
     c << b[ib] 
     ib += 1 
    end 
    end 
end 

merge_sorted([0, 2, 4, 6, 8], [0, 3, 6, 9]) 
    #=> [0, 0, 2, 3, 4, 6, 6, 8, 9] 
0

作爲DEF merge_sorted(A,B) SA,SB = a.size,b.size IA = IB = 0 C = [] 環做 (返程C + A [IA。 。-1])如果(IB == SB) (返程C + b [IB ..- 1])如果(IA == SA) 如果[IA] < b [IB] ç< <一個[ ia] ia + = 1 else c < < b [ib] ib + = 1 end 最終 結束

merge_sorted([0, 2, 4, 6, 8], [0, 3, 6, 9]) 
    #=> [0, 0, 2, 3, 4, 6, 6, 8, 9]