数组c#中的上一个索引

时间:2016-11-11 02:18:57

标签: c# arrays search

我有一个初始化的数组:

int[] myArray = new int[] {9, 8, 7, 3, 4, 5, 6, 2, 1};

然后我有一个for()循环,每次使用:

搜索数组中的最高值
int maxValue = myArray.Max();
int maxIndex = myArray.ToList().IndexOf(maxValue);

显然,它仍然认为9是最高值。

我希望它首先将先前索引的值设置为低于当前maxValue但高于-1的随机值,并继续在数组中搜索下一个maxValue并将其打印到控制台。

(如果所有值达到值== 0则模拟停止)< - 这部分我知道该怎么做。

这可能吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:1)

我想这可能是你想要的。让我知道它对你有用。

using System;
using System.Linq;

public class Program
{
    private static Random random = new Random();

    public static void Main()
    {
        int[] myArray = new int[] {9, 8, 7, 3, 4, 5, 6, 2, 1};
        Simulate(myArray);

    }

    static void Simulate(int[] myArray)
    {
        int maxValue = myArray.Max();
        Console.WriteLine(string.Join(" ",myArray));
        var continueSimulation = true;
        do{

            int maxIndex = myArray.ToList().IndexOf(maxValue);
            var randomValue = random.Next(0, maxValue);
            myArray[maxIndex] = randomValue;

            maxValue = myArray.Max();
            if (maxValue == 0)
                continueSimulation = false;

            Console.WriteLine(string.Join(" ",myArray));

        }while(continueSimulation);
    }
}

您可以在this小提琴上查看。

希望这有帮助!

答案 1 :(得分:0)

如果要查找第二个最大值,可以标记第一个最大值的位置,然后继续使用相同的方法。怎么办? 1-初始化一个bool数组,其数组长度与你想要找到max的数组相同,然后找到第一个max并在第二个数组中用true标记该位置,如果你想要第二个max,则循环通过要求最大值的数组以及该元素是否未在第二个bool数组中标记。最后你将得到第二个最大值。 另一个想法是在列表中获取值,一旦找到最大值,从列表中删除max以继续使用相同的算法,但使用较少值的数组

static int Max(int [] num)
{
    int max = num[0];

    for(int i = 0; i < num.Length; i ++)
    {
        if(num[i] > max)
            max = num[i];
    }

    return max;
}

static int SecondMax(int[]a)
{
    if(a.Length < 2) throw new Exception("....");

    int count = 0; 
    int max = Max(a);
    int[]b = new int[a.Length];

    for(int i = 0; i < a.Length; i ++)
    {
        if(a[i] == max && count == 0)
        {
            b[i] = int.MinValue; 
            count ++;
        }
        else b[i] = a[i];
    }

    return Max(b);
 }

答案 2 :(得分:0)

老实说,这个问题有点不寻常,所以如果你分享为什么要尝试这样做,也许有人会提出更好的方法。但是,要回答原始问题,您可以使用.NET的随机数生成器。

    int[] myArray = new int[] { 9, 8, 7, 3, 4, 5, 6, 2, 1 };
    Random random = new Random();

    for (int max = myArray.Max(); max > 0; max = myArray.Max())
    {
        int index = myArray.IndexOf(max);

        DoSomething(max);

        myArray[index] = random.Next(0, max);
    }

MSDN doco on Random开始,上限是独占的,这意味着它将生成0到max-1之间的随机数,除非max == 0,在这种情况下它将返回0。