假设我在堆栈中的堆栈中添加了5个值
student1.grades.Push(60);
student1.grades.Push(70);
student1.grades.Push(80);
student1.grades.Push(90);
student1.grades.Push(100);
我想在堆栈中替换第三个值而不会丢失上述两个值。 尝试if条件在堆栈中找到值但是没有找到堆栈中的任何方法来替换它。
if (student1.grades.Contains(80)==true)
{
// Unsure what to do here.
}
答案 0 :(得分:2)
为了替换堆栈数据结构中的单个值,您可以使用此算法:
输入是原始堆栈,让我们调用此堆栈
这将完成我在您的问题评论中所说的内容:弹出要替换的值之上的所有值,弹出值,推回新值,推回之前弹出的所有值。
这是Stack<T>
的C#扩展方法,可以实现您的目标:
public static class StackExtensions
{
public static void Replace<T>(this Stack<T> stack, T valueToReplace, T valueToReplaceWith, IEqualityComparer<T> comparer = null)
{
comparer = comparer ?? EqualityComparer<T>.Default;
var temp = new Stack<T>();
while (stack.Count > 0)
{
var value = stack.Pop();
if (comparer.Equals(value, valueToReplace))
{
stack.Push(valueToReplaceWith);
break;
}
temp.Push(value);
}
while (temp.Count > 0)
stack.Push(temp.Pop());
}
}
你会这样称呼:
student1.grades.Replace(80, 85);
答案 1 :(得分:0)
看起来你不想使用堆栈,而是想要使用List或者词典......
例如,如果有两个标记80怎么办?你怎么知道要删除哪一个?
你可能想拥有;
Dictionary<String, int> MarksBySubject
然后你可以这样做;
MarksBySubject.Add("Maths", 80);
并删除它;
MarksBySubjects.Remove("Maths");