我正在尝试编写一个函数,该函数将从一个数组中具有匹配字符串名称的3d数组中删除一个数组。
before(:each) do
@topic1 = Topic.new 4,'topic 1'
@topic2 = Topic.new 7,'topic 2'
@topic3 = Topic.new 5,'topic 3'
@subject = Subject.new 'Module 1',2,5
end
参数是No_of_Lectures和Name
@topics = [5,'Topic1'], [3,'Topic2'], [5,'Topic3']
基本上我想删除Name =' Topic1'如果它不在列表中,则返回null。
到目前为止我所拥有的是
def findTopic name
@topics.find {|topic| topic.name == name }
end
def removeTopic name_in
if @topics.findTopic(name)
@topics.delete_if {|key, name| name == name_in }
topic
else
null
end
end
答案 0 :(得分:3)
一个3d数组
你的阵列是二维的。
红宝石中不存在如果不在列表中,则返回null。
null
- 但是nil
。
def remove(target, array2D)
results = array2D.reject do |arr|
arr.last == target
end
results.size == array2D.size ? nil : results
end
test_arrays = [
[[5,'Topic1'], [3,'Topic2'], [5,'Topic3']],
[[5,'Topic4'], [3,'Topic5'], [5,'Topic6']]
]
test_arrays.each do |array2D|
p remove('Topic2', array2D)
end
--output:--
[[5, "Topic1"], [5, "Topic3"]]
nil
另一方面,这个问题的解决方案:
从列表中删除主题。返回删除的主题;除此以外, 当主题当前不在列表中时返回null。
是:
def remove(target, array2D)
array2D.each_with_index do |arr, index|
if arr.last == target
array2D.delete_at(index)
return arr
end
end
return nil
end
test_arrays = [
[[5,'Topic1'], [3,'Topic2'], [5,'Topic3']],
[[5,'Topic4'], [3,'Topic5'], [5,'Topic6']]
]
test_arrays.each do |array2D|
p remove('Topic2', array2D)
end
--output:--
[3, "Topic2"]
nil