【问题标题】:C# Stack Modify Top ElementC# 堆栈修改顶部元素
【发布时间】:2022-11-02 22:23:55
【问题描述】:

如果我想修改Stack 的顶部,我该怎么做?

我知道你可以使用Stack.Pop() 然后推回修改后的值,但这似乎不优雅。 还有其他方法吗?

例子:

Stack<string> stringStack;
stringStack.Push("foo");
stringStack.Push("ba");
stringStack.Replace("bar"); //implementation 

这似乎有一个非常明显的答案。不知道为什么它还没有实施。

【问题讨论】:

  • 您可以为 Stack 创建扩展方法。在该方法中,只需再次弹出并推送新值。
  • 您将无法逃脱弹出和推送,这只是在 .net 中实现堆栈的方式。好消息是两个操作都是 O(1)如果它不会破坏容量。老实说,如果您需要对集合中的元素进行许多突变,则数组或 List<T> 更适合,因为这将是单个 O(1) 操作,而堆栈弹出推送则为 2
  • 只是提到它:正如this answer (related to Queue) 中所建议的,当您有一堆引用类型.

标签: c# collections stack


【解决方案1】:

您可以像这样创建扩展方法;

public static class StackExtensions
{
    public static void Replace<T>(this Stack<T> stack, T item)
    {
        stack.Pop();
        
        stack.Push(item);
    }
}

你可以这样使用它;

var stringStack = new Stack<string>();
stringStack.Push("foo");
stringStack.Push("ba");
stringStack.Replace("bar");

foreach (var item in stringStack)
{
    Console.WriteLine(item);
}

这会给你这个输出;

bar
foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2022-12-11
    相关资源
    最近更新 更多