使用随机类删除数组中的指定元素

时间:2013-09-04 21:53:29

标签: c#

class Check
{
     public static void Main()
     {         
              int[] arr1 = new int[] { 1, 2, 3 };
              Console.WriteLine("The Number That Left Us Is");
              Random rnd = new Random();
              int r = rnd.Next(arr1.Length);
              int Left = (arr1[r]);
              Console.WriteLine(Left);
      }
 }

如果生成2,我想要删除2,剩下的i必须留下1应该是1和3。 谁能帮忙。它可以在数组中完成。

4 个答案:

答案 0 :(得分:2)

无法重新调整数组的大小,你设置的数组永远都是那么大。

“最佳”选项是使用List<int>代替int[]

class Check
{
     public static void Main()
     {         
              List<int> arr1 = List<int>int[] { 1, 2, 3 };
              Console.WriteLine("The Number That Left Us Is");
              Random rnd = new Random();
              int r = rnd.Next(arr1.Length);
              int Left = (arr1[r]);
              arr1.RemoveAt(r);
              Console.WriteLine(Left);
      }
 }

要实际创建一个小一个尺寸的新数组,将需要更多代码。

class Check
{
     public static void Main()
     {         
              int[] arr1 = int[] { 1, 2, 3 };
              Console.WriteLine("The Number That Left Us Is");
              Random rnd = new Random();
              int r = rnd.Next(arr1.Length);
              int Left = (arr1[r]);

              int oldLength = arr1.Length;
              arrTmp = arr1;                  
              arr1 = new int[oldLength - 1];
              Array.Copy(arrTmp, arr1, r);
              Array.Copy(arrTmp, r+1, arr1, r, oldLength - r - 1);

              Console.WriteLine(Left);
      }
 }

你提到“你必须坚持使用数组”,将列表转换为数组非常容易

class Check
{
     public static void Main()
     {         
              List<int> arr1 = List<int>int[] { 1, 2, 3 };
              Console.WriteLine("The Number That Left Us Is");
              Random rnd = new Random();
              int r = rnd.Next(arr1.Length);
              int Left = (arr1[r]);
              arr1.RemoveAt(r);
              Console.WriteLine(Left);
              SomeFunctionThatTakesAnArrayAsAnArgument(arr1.ToArray());
      }
 }

答案 1 :(得分:1)

无法调整数组大小,如果要删除项目,请使用List<T>

但是,您可以创建一个新的。如果你想保留除随机索引之外的所有项目:

arr1 = arr1.Where((i, index) => index != r).ToArray();

使用列表,您可以使用RemoveAt,这比创建数组更有效:

var list = new List<int> { 1, 2, 3 };
list.RemoveAt(r);

答案 2 :(得分:0)

无法在.NET中动态调整数组的大小,因此您无法从数组中“删除”某个项目(您可以将其设置为0,但我认为这不是您想要的)。

尝试使用List<int>代替:

List<int> list = new List<int>() { 1, 2, 3 };
Console.WriteLine("The Number That Left Us Is");
Random rnd = new Random();
int r = rnd.Next(list.Count);
int Left = (list[r]);
list.Remove(Left);
Console.WriteLine(Left);

答案 3 :(得分:0)

尝试按照它从列表中删除项目并创建一个没有特定项目的新数组。

static void Main(string[] args)
{
       int[] arr1 = new int[] { 1, 2, 3 };
      Console.WriteLine("The Number That Left Us Is");
      Random rnd = new Random();
      int r = rnd.Next(arr1.Length);

      // Create a new array except the item in the specific location
      arr1 = arr1.Except(new int[]{arr1[r]}).ToArray();
      int Left = (arr1[r]);
      Console.WriteLine(Left);
}