110,502
社区成员
发帖
与我相关
我的任务
分享
private static int[] GetRandomIntValues(int expectedCouont)
{
Dictionary<int, int> container = new Dictionary<int, int>(expectedCouont);
Random r = new Random();
while(container.Count < expectedCouont)
{
int value = r.Next();
if (!container.ContainsKey(value))
{
container.Add(value, value);
}
}
int[] result = new int[expectedCouont];
container.Values.CopyTo(result, 0);
return result;
}
测试 了一下速度
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
int[] list = GetRandomIntValues(1000000);
watch.Stop();
Console.WriteLine(watch.Elapsed.TotalSeconds);
}
结果是0.1299777 秒,不知道你能不能接受,反正我是觉得可以接受了。。
static void f4() {
Random rdm = new Random(DateTime.Now.Millisecond);
// 记录开始时间
DateTime t1 = DateTime.Now;
// 生成一副1000W的牌
int[] data = new int[1000 * 10000];
for (int i = 0; i < data.Length; i++) {
data[i] = i;
}
// 打乱这副牌
for (int i = 0; i < data.Length; i++) {
int idx1 = i;
int idx2 = rdm.Next(data.Length);
int tmp = data[idx1];
data[idx1] = data[idx2];
data[idx2] = tmp;
}
// 取这副牌的前100W条记录,结果放在 result 中
int[] result = new int[100 * 10000];
for (int i = 0; i < result.Length; i++) {
result[i] = data[i];
}
// 终止时间
DateTime t2 = DateTime.Now;
// 打印总共用时,我测试是0.6510372秒
Console.WriteLine((t2 - t1).TotalSeconds);
for (int i = 0; i < 100; i++) {
Console.Write(" ");
Console.Write(result[i]);
}
}
static void f5() {
Random rdm = new Random(DateTime.Now.Millisecond);
// 记录开始时间
DateTime t1 = DateTime.Now;
// 创建100W元素的数组,每个元素后一值随机比前一个增大
int[] result = new int[100 * 10000];
result[0] = 0;
for (int i = 1; i < result.Length; i++) {
result[i] = result[i - 1] + rdm.Next(10) + 1;
}
// 打乱
for (int i = 0; i < result.Length; i++) {
int idx1 = i;
int idx2 = rdm.Next(result.Length);
int tmp = result[idx1];
result[idx1] = result[idx2];
result[idx2] = tmp;
}
DateTime t2 = DateTime.Now;
// 我测试用时 0.0510029 秒
Console.WriteLine((t2 - t1).TotalSeconds);
for (int i = 0; i < 100; i++) {
Console.Write(" ");
Console.Write(result[i]);
}
}
Enumerable.Range(0, 100).OrderBy(x => Guid.NewGuid())