我是新手,学习语言。我有多年的COP OOP经验。有一个堆栈器接口用go和它的两个实现编写,一个是slice基栈,另一个是linkedlist base。
我发现很难比较两种不同的结构,并判断它们是否包含相同的数据。下面的简单示例代码列表(注意很多函数/实现未列出,因为它们与此问题不相关)。关键功能是 stackEquals ,我尝试了不同的方法来解决它,但它们失败了。请参阅代码中的注释。
.train{
-webkit-animation: progress-bar 5s;
-moz-animation: progress-bar 5s;
animation: progress-bar 5s;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-color: #bc2122;
}
@keyframes progress-bar {
from {
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background: -moz-linear-gradient(bottom, #67A062 0%, #67A062 0%, #bc2122 0%, #bc2122 100%);
background: -webkit-linear-gradient(bottom, #67A062 0%,#67A062 0%,#bc2122 0%,#bc2122 100%);
background: linear-gradient(to top, #67A062 0%,#67A062 0%,#bc2122 0%,#bc2122 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=#67A062, endColorstr=#bc2122,GradientType=0 );
}
to {
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background: -moz-linear-gradient(bottom, #67A062 0%, #67A062 60%, #bc2122 60%, #bc2122 100%);
background: -webkit-linear-gradient(bottom, #67A062 0%,#67A062 60%,#bc2122 60%,#bc2122 100%);
background: linear-gradient(to top, #67A062 0%,#67A062 60%,#bc2122 60%,#bc2122 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#67A062, endColorstr=#bc2122,GradientType=0 );
}
};
如何比较以不同方式实现的两个堆栈,并判断堆栈中它们是否相同(相同的值是相同的值)。
答案 0 :(得分:2)
如果你需要比较两个接口,你只能使用该接口中的方法,所以在这种情况下,接口中不存在Contributor
(即使你的两个实现都有它,接口本身没有)。
可能的实施方式是:
String
这假设唯一的错误func stackEquals(s, t Stacker) bool {
// if they are the same object, return true
if s == t {
return true
}
// if they have different sizes or the next element is not the same,
// then they are different
if s.size() != t.size() || s.peek() != t.peek() {
return false
}
// they could be the same, so let's copy them so that we don't mess up
// the originals
ss = s.copy()
tt = t.copy()
// iterate through the values and check if each one is
// the same. If not, return false
for ; i, err := ss.pop(); err == nil {
if j, err := tt.pop(); err != nil || i != j {
return false
}
}
return true
}
会在没有更多值的情况下获得,否则您需要进行更好的错误检查并使用pop
。