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

C# 使用随机类删除数组中的指定元素,c#,C#,如果生成了2,我希望删除2,剩下的应该是1和3。 有人能帮忙吗。它可以在数组中完成。数组不能在.NET中动态调整大小,因此您不能真正从数组中“删除”项目(您可以将其设置为0,但我认为这不是您想要的) 尝试使用列表: class Check { public static void Main() { int[] arr1 = new int[] { 1, 2, 3 }; Console.WriteLine

如果生成了2,我希望删除2,剩下的应该是1和3。
有人能帮忙吗。它可以在数组中完成。

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

尝试使用
列表

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);
      }
 }
List List=newlist(){1,2,3};
Console.WriteLine(“留给我们的号码是”);
随机rnd=新随机();
int r=rnd.Next(list.Count);
int Left=(列表[r]);
列表。删除(左);
控制台。WriteLine(左);

无法调整数组的大小,如果要删除项目,请使用
列表

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

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);
您可以使用比创建阵列更高效的列表:

arr1 = arr1.Where((i, index) => index != r).ToArray();
var list=新列表{1,2,3};
列表。删除(r);

阵列无法重新调整大小,只要您设置它们,它们将永远保持该大小

“最佳”选项是使用
列表
而不是
int[]

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

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

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);
      }
 }
类检查
{
公共静态void Main()
{         
List arr1=Listint[]{1,2,3};
Console.WriteLine(“留给我们的号码是”);
随机rnd=新随机();
int r=rnd.Next(arr1.Length);
int Left=(arr1[r]);
arr1.移除(r);
控制台。WriteLine(左);
某些函数接受sanarrayasanargument(arr1.ToArray());
}
}

尝试跟随它从列表中删除该项,并创建一个没有特定项的新数组

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());
      }
 }

您必须使用数组,是否可以使用
列表
?如果可以的话,这将非常容易。我必须坚持数组我不明白为什么它应该是数组,但我会将它们存储在哈希集中(如果数字是唯一的),因为对于随机数,您希望删除一个值,而不是索引。哈希集可以快速处理索引值。搜索/添加/删除..在我看来,这段代码在arr1中保留了元素2,而不是反向。o,它删除了一个位于随机整数索引处的元素。请参阅:是的,因为我没有看到not符号,抱歉。您可以使用.net调整一维数组的大小。请参阅以下文章和简单示例@Marko
Array。resize
是.net 4.0的新功能,它只是一个包装器,只是从末尾移除。如果您想像代码一样从中间调整大小,您需要执行两个复制操作,如我在回答中所示。
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());
      }
 }
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);
}