关于Random 和 List<int>的Exist的方法使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace List
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = Getint();
            foreach (var item in list)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();
        }

        static Random rd = new Random();
        public static List<int> Getint()
        {
            List<int> list = new List<int>();
            while (true)
            {
               // Random rd = new Random();
                int id =rd.Next(0, 1111);
                if (list.Count != 0)
                {
                    if (!list.Contains(id))
                    {
                        list.Add(id);
                    }
                }
                else
                {
                    list.Add(id);
                }

                if (list.Count>3)
                {
                    break;
                }
            }
            return list;
        }
    }
}

以上的代码很简单。

两个Random放在不同的位置,产生的不同的随机值相等几率是不同的。在循环外头的生成的相同概率是比较小的。

这里的问题在于它是一个伪随机,并非一个真随机数。

随机数的选择是从随机种子开始的,默认的随机种子很容易生成相同的随机数。

当循环的速度快时,每次都去new了一个相同的随机值的概率是很大的。

之前认为,每new一个,这样产生的随机值应该是不一样的,但是由于伪随机的原因,结果一堆一样的随机值出现了。

还有那个Exists的用法也是很奇怪了,因为我只是int类型,并未使用复杂的结构体。尝试过多个写法,但是未能实现功能。最后还是只能用Contains

if (list.Exists(x => x != id))
{
list.Add(id);
}//不行

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Compsognathus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Oviraptor");
        dinosaurs.Add("Velociraptor");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Dilophosaurus");
        dinosaurs.Add("Gallimimus");
        dinosaurs.Add("Triceratops");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("
TrueForAll(EndsWithSaurus): {0}",
            dinosaurs.TrueForAll(EndsWithSaurus));

        Console.WriteLine("
Find(EndsWithSaurus): {0}", 
            dinosaurs.Find(EndsWithSaurus));

        Console.WriteLine("
FindLast(EndsWithSaurus): {0}",
            dinosaurs.FindLast(EndsWithSaurus));

        Console.WriteLine("
FindAll(EndsWithSaurus):");
        List<string> sublist = dinosaurs.FindAll(EndsWithSaurus);

        foreach(string dinosaur in sublist)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "
{0} elements removed by RemoveAll(EndsWithSaurus).", 
            dinosaurs.RemoveAll(EndsWithSaurus));

        Console.WriteLine("
List now contains:");
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("
Exists(EndsWithSaurus): {0}", 
            dinosaurs.Exists(EndsWithSaurus));
      

      //改写

           Console.WriteLine(" Exists(EndsWithSaurus): {0}",
           dinosaurs.Exists((s) =>{ return s.ToLower().EndsWith("saurus"); }));


    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        return s.ToLower().EndsWith("saurus");
    }
}

循环遍历到真就返回了。

原文地址:https://www.cnblogs.com/annkiny/p/7021593.html