swap一下就好了,直接删除可能会比较慢using System;namespace csdnTest { class Program { static void Main(string[] args) { int[] Items = new int[20]; for (int i = 0; i < Items.Length; i++) Items[i] = i; Random rnd = new Random(); for (int i = Items.Length - 1; i >= 0; i--) { int k = rnd.Next(i); Swap(Items,k, i); } for (int i = 0; i < Items.Length >> 1; i++) Console.WriteLine("{0} {1}", Items[i * 2], Items[i * 2 + 1]); Console.ReadKey(); } static void Swap(int[] array, int indexA, int indexB) { int value = array[indexA]; array[indexA] = array[indexB]; array[indexB] = value; } } }
直接new一个guid,然后按guid排序就成了 var input = Enumerable.Range(1, 20).ToArray(); var res1=input.Select(c=>new {i=c,guid=Guid.NewGuid()}); var res2=res1.OrderBy(c=>c.guid);//res2就是你要的,已经随机排序了,至于两两匹配自己两个两个取就是了
效率也不高
取两个随机数从1到Count,若这两随机数不同,则配对,LIST里相应元素REMOVE,Count减
一直到只剩2个元素
{
class Program
{
static void Main(string[] args)
{
int[] Items = new int[20]; for (int i = 0; i < Items.Length; i++)
Items[i] = i; Random rnd = new Random(); for (int i = Items.Length - 1; i >= 0; i--)
{
int k = rnd.Next(i);
Swap(Items,k, i);
} for (int i = 0; i < Items.Length >> 1; i++)
Console.WriteLine("{0} {1}", Items[i * 2], Items[i * 2 + 1]); Console.ReadKey();
} static void Swap(int[] array, int indexA, int indexB)
{
int value = array[indexA];
array[indexA] = array[indexB];
array[indexB] = value;
}
}
}
var input = Enumerable.Range(1, 20).ToArray();
var res1=input.Select(c=>new {i=c,guid=Guid.NewGuid()});
var res2=res1.OrderBy(c=>c.guid);//res2就是你要的,已经随机排序了,至于两两匹配自己两个两个取就是了
这题都用linq了。。