您的位置:首页 > 其它

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

2017-06-16 00:13 381 查看
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");
}
}


循环遍历到真就返回了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐