我有一個作業列表,並且寫了一個規範給以下問題,列表中的一個項目依賴於另一個項目。我得到的結果是兩次返回列表項c。現在的問題是:ruby作業單列表中的單個依賴關係正在複製其結果
Given the following job structure:
a =>
b => c
c =>
The result should be a sequence that positions c before b, containing all three jobs abc.
我很困惑,因爲我的測試失敗瞭如下
1) JobsList should return ordered multiple jobs with the dependency if multiple jobs with single dependency were supplied
Failure/Error: expect(JobsList.sequence({'a' => nil, 'b' => 'c', 'c' => nil})).to eq ['a', 'c', 'b']
expected: ["a", "c", "b"]
got: ["a", "c", "c", "b"]
(compared using ==)
我在這裏無所適從我做錯了任何人都可以提出任何建議?
jobs_list_spec
require 'jobs_list'
describe JobsList do
it "should return an empty sequence of jobs if a blank hash was supplied" do
expect(JobsList.sequence({})).to eq []
end
it "should return an single job character if a single jobs was supplied" do
expect(JobsList.sequence({'a' => nil})).to eq ['a']
end
it "should return multiple jobs characters if a multiple jobs were supplied" do
expect(JobsList.sequence({'a' => nil, 'b' => nil, 'c' => nil})).to eq ['a', 'b', 'c']
end
it "should return ordered multiple jobs with the dependency if multiple jobs with single dependency were supplied" do
expect(JobsList.sequence({'a' => nil, 'b' => 'c', 'c' => nil})).to eq ['a', 'c', 'b']
end
jobs_list.rb
class JobsList
def self.sequence(jobs={})
grouped_jobs = jobs.group_by{|k, v| v}
grouped_jobs.map do |k,v|
array = []
if k
array = array + [k]
end
array = array + v.map{|a| a[0]}
end.flatten
end
end
爲什麼你認爲你的算法應該工作?如果你可以解釋你的推理,有人可能會發現一個缺陷(或者你的實現和你認爲你已經實現的區別) – 2015-02-08 12:47:17