如何在C#中使用System.Collections.Queue找到最小值

时间:2014-09-10 11:00:57

标签: c# queue

我有一些问题。我需要找到最小值和最大值并交换它们。这是我的代码,请帮助我,如果可以的话。感谢。

Queue myQueue = new Queue();
Random rnd = new Random();
for (var k = 0; k <= 5; k++) myQueue.Enqueue(rnd.Next(0, 10));
foreach (var d in myQueue) Console.Write("{0} ", d);
var min = (int)myQueue.Peek(); var max = 0;
var minInd = 0; var maxInd = 0;
for (var c = 0; c < myQueue.Count; c++)
{
   if ((int)myQueue.Peek() < min)
   {
       min = (int)myQueue.Peek();
       minInd = c;
   }
   if ((int)myQueue.Peek() > max)
   {
       max = (int)myQueue.Peek();
       maxInd = c;
   }
   foreach (var f in myQueue) Console.Write(" {0}", f);
}

2 个答案:

答案 0 :(得分:0)

首先,您使用的是错误的类。 Queue用于列出需要按顺序处理的内容,而不是处理数据集。我编辑了你的代码以使用List<>,进行了一些常规清理,并添加了交换代码:

List<int> list = new List<int>();
Random rnd = new Random();
for (var k = 0; k <= 5; k++)
    list.Add(rnd.Next(0, 10));

int min = 0;
int max = 0;

for (var i = 0; i < list.Count; i++)
{
    if (list[i] < min)
        min = i;
    if (list[i] > max)
        max = i;
}

Console.Write("Before: ");
foreach (var item in list)
    Console.Write("{0}", item);

var tmp = list[min];
list[min] = list[max];
list[max] = tmp;

Console.Write("\nAfter: ");
var queue = new Queue(list);
foreach (var item in queue)
    Console.Write("{0}", item);
Console.ReadLine();

答案 1 :(得分:0)

正如另一个答案中所提到的,没有理由在这里使用队列,也可以使一切变得更容易。

var randomList = Enumerable.Range(0,5).ToList();
var min = randomList.Min();
var max = randomList.Max();
var minIndex = randomList.IndexOf(min);
var maxIndex = randomList.IndexOf(max);
randomList[minIndex] = max;
randomList[maxIndex] = min;

正如你所看到的,事情不一定很难:)