如何比较重复值?

时间:2017-12-07 02:22:23

标签: c#

private int pic = 0;
private List<int> num = null;
.
.
.

.
.
public void ss(){   
this.imageList = new List<Image>();
this.imageList.Add(Properties.Resources.1);
this.imageList.Add(Properties.Resources.2);
this.imageList.Add(Properties.Resources.3);
.   
.   
.   
.
.
this.imageList.Add(Properties.Resources.58);
this.imageList.Add(Properties.Resources.59);
 this.pic = GetMyRandomNumber(0, 60); 

 if (this.num == null) 
    this.num= new List<int>(); 

 while (this.num.Count < 61) 
 { 
       pic = GetMyRandomNumber(0, 60); 

       if (this.num.Contains(pic) == false) 
       { 
             this.num.Add(pic); 
             break; 
       } 
 } 
 this.pictureBox1.Image = imageList[pic];   

}

此代码在调用ss方法时检查重复项

将值存储在num中,并检查存储的值是否重复。

但是相同的值存储在pic

重复值继续出现。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

希望这个帮助

    public static void Main(string[] args)
    {
        var nums = new List<int>() { 1, 2, 3, 3, 4, 5 };
        Print(nums);
        //REMOVE DUPLIDATED VALUES AT THE LINE BELOW
        nums = nums.Distinct().ToList();
        Print(nums);
        Console.Read();
    }

    public static void Print(List<int> nums)
    {
        foreach (var num in nums)
        {
            Console.Write(num.ToString() + ", ");
        }
        Console.WriteLine();
    }

答案 1 :(得分:0)

这里可能会发生一些事情。在“GetMyRandomNumber”方法中,您可能正在使用需要以某种方式使用的“Random”类,以避免对象背对背地检索相同的值以及线程安全的注意事项。

以下是MSDN关于使用“随机”

的引用
  

我们建议您创建一个Random实例来生成应用程序所需的所有随机数,而不是实例化单个Random对象。但是,Random对象不是线程安全的。如果您的应用程序从多个线程调用随机方法,则必须使用同步对象以确保一次只有一个线程可以访问随机数生成器。如果不确保以线程安全的方式访问Random对象,则对返回随机数的方法的调用将返回0.

您似乎还想跟踪所选的随机数。

这是另一种方法,它也有助于查找速度。

    static void Main(string[] args)
    {
        HashSet<int> picked = new HashSet<int>(Enumerable.Range(0, 60));
        int pic = GetMyRandomNumber(picked);
        //...Other code here
    }

    private readonly static object _syncLock = new object();
    private readonly static Random _random = new Random();

    static int GetMyRandomNumber(HashSet<int> picked)
    {
        lock (_syncLock)
        {
            int rand = _random.Next(0, picked.Count);
            picked.Remove(rand);

            return rand;
        }
    }

这确保一旦您从0-60中选择了一个随机数,就不能再次选择它。