什么是优雅的(短)的方式由-1乘以一个队列的每一个项目(queue.ForEach似乎并不存在)乘以所有项目,这似乎是过度念给整个队列并将其写入另一个队列。有没有办法做到这一点?C#队列-1
Q
C#队列-1
-1
A
回答
6
编辑旁白:我不明白为什么这个问题是downvoted或投票决定关闭。这是一个完全合理的问题。
如果你想要做的是获得在队列中的元素否定:
var negated = myQueue.Select(x => -x);
foreach(int x in negated) ...
需要注意的是“否定”将继续即使您更改队列的内容合作!查询对象在枚举时评估,而不是在创建时评估。
注意myQueue
是没有改变; negated
仅仅是它周围的包装,否定的元素,因为它们是枚举。
2
Queues被设计成只能将一个项目写入队列的后面(入队)或从队列的前面读取(peek/dequeue)。更改队列中间的项目不是定义的操作。所以即使存在一个ForEach
方法,它也往往会破坏数据结构的目的。
这将是更好,因为你排队否定项或出列他们。你可以写一个扩展方法,如果你真的想要,例如:
public static class QueueExtensions
{
public static int DequeueAndNegate(this Queue<int> queue)
{
return queue.Dequeue() * -1;
}
// -- or --
public static void NegateAndEnqueue(this Queue<int> queue, int value)
{
queue.Enqueue(value * -1);
}
}
var queue = new Queue<int>(new[] { 1, 2, 3 });
while (queue.Count > 0)
{
Console.WriteLine(queue.DequeueAndNegate()); // -1 -2 -3
}
如果你真的需要一个数据结构,使项目的就地改造,你需要使用不同的数据结构,例如一个List<int>
。
相关问题
- 1. 入队C#队列
- 2. C中的队列队列#
- 3. m/m/1队列示例
- 4. C++队列错误
- 5. 优先队列C++
- 6. 队列+堆栈C++
- 7. C++队列模拟
- 8. 队列在C#ILIST
- 9. 动态队列C++
- 10. C#请求队列
- 11. C#队列实现#
- 12. 队列实现C++
- 13. C++队列模板
- 14. C#队列任务
- 15. 用C填写队列C
- 16. 入队后在队列中修改的C#队列对象
- 17. 目标C - 手动排队FIFO队列
- 18. 队列<T> O(1)时间
- 19. 如何只在1个队列
- 20. omnet ++ M/M/1队列长度
- 21. C动态增加队列
- 22. c中的pthread队列
- 23. 从双端队列C++
- 24. C++队列内存泄漏
- 25. C# - ListView项选择队列
- 26. C队列编程问题
- 27. C++中的循环队列
- 28. 队列布尔用C
- 29. c中类的队列#
- 30. C,排序结构队列
'queue.ForEach'将是一个只读方法,不会做你想要的东西。 (就像'foreach') –
嗯,不,这是-100点使用了错误的集合对象。当你不解释为什么你认为你需要这样做时,很难得到0以上的结果。 –
同意@HansPassant,你可能使用了错误的集合。你会做什么是浪费,你确定为什么会这样..... – FirebladeDan