gpt4 book ai didi

c# - 队列将项目移回末尾

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:20 24 4
gpt4 key购买 nike

我有一个 System.Collection.Generic.Queue<int>使用以下示例代码

Queue<int> iq = new Queue<int>();
iq.Enqueue(1); // 1
iq.Enqueue(2); // 1 2
iq.Enqueue(3); // 1 2 3

//move 1 to the end of the line here

int i = iq.Dequeue(); // 2 3

我想移动值(访问)1回到行尾,结果是 21将是最后一个可出列的值。

有什么想法吗?有没有类似 iq.MoveToLast(1) 的东西?

最佳答案

如果你想Remove/Add项目的,你可以使用List<T>而不是 Queue<T> :

List<int> id = ...

int itemToMove = 2;

int index = id.IndexOf(itemToMove);

// If we have item found we should put it at the end
if (index >= 0) {
id.Add(id[index]);
id.RemoveAt(index);
}

如果您必须使用 Queue<T>你可以创建一个时间 List<T> :

  Queue<int> iq = ...

int itemToMove = 2;

// Create temporal list
var list = iq.ToList();

// process items in it
int index = list.IndexOf(itemToMove);

if (index >= 0) {
list.Add(list[index]);
list.RemoveAt(index);
}

// enqueue items back into queue in the desired order
iq.Clear();

foreach (var item in list)
iq.Enqueue(item);

最后,您可以实现一个扩展方法:

  public static partial class QueueExtensions {
public static void MoveToLast<T>(this Queue<int> queue, T itemToMove) {
if (null == queue)
throw new ArgumentNullException(nameof(queue));

var list = queue.ToList();

int index = list.IndexOf(itemToMove);

if (index < 0)
return; // Nothing to do

list.Add(list[index]);
list.RemoveAt(index);

queue.Clear();

foreach (var item in list)
queue.Enqueue(item);
}
}

然后你可以把

 iq.MoveToLast(1);

关于c# - 队列将项目移回末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58166679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com