关于Random 和 List的Exist的方法使用

时间:2021-06-05 19:41:30
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(
"\nTrueForAll(EndsWithSaurus): {0}",
dinosaurs.TrueForAll(EndsWithSaurus));

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

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

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

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

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

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

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

      //改写

           Console.WriteLine("\nExists(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");
}
}

循环遍历到真就返回了。