-2
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,剩下的我必须留下 1 和 3。任何人都可以帮忙。是否可以在数组中完成。

4

4 回答 4

2

数组不能重新调整大小,你设置它们的时候它们永远是那个大小。

“最佳”选项是使用 aList<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());
      }
 }
于 2013-09-04T21:58:52.587 回答
1

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

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

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

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

var list = new List<int> { 1, 2, 3 };
list.RemoveAt(r);
于 2013-09-04T21:58:33.003 回答
0

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

尝试使用 aList<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);
于 2013-09-04T21:58:02.377 回答
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);
}
于 2013-09-04T22:32:35.130 回答