如何删除数组中的一个元素

本文关键字:一个 元素 数组 何删除 删除 | 更新日期: 2023-09-27 18:03:15

我知道这个主题名称与另一个主题相似,但那个主题没有我想要的答案,所以…

<标题>问题1:

假设我有一个数组

string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
    test[x] = "#" + (x + 1) + " element";
    Console.WriteLine(test[x]);
}
/*
output:
#1 element
#2 element
#3 element
#4 element
#5 element
*/

,然后说我想删除& #4元素"从字符串数组中获取,从而输出:

/*
output:
#1 element
#2 element
#3 element
#5 element
*/

我该怎么做?

[PS:]我正在寻找的答案是一些很容易理解的东西,为初学者

如何删除数组中的一个元素

如果您想在特定索引处删除,您可以这样做:

int[] numbers = { 1,2,3,4,5};
List<int> tmp = new List<int>(numbers);
tmp.RemoveAt(4);
numbers = tmp.ToArray();

但是在你的情况下,因为你只是希望元素是不可见的,并且数组长度相同:

string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
    if(x!=3){
    test[x] = "#" + (x + 1) + " element";
    Console.WriteLine(test[x]);}
}

你不能直接从数组中删除一个元素,例如你只能将它设置为""

List<string>代替

第一个ans:

你可以使用list,或者如果你不想使用list,可以使用Linq,但它会为数组创建一个不同的内存位置,并将元素存储在那里(我想)。你可以在数组上实现linq,如下所示:

test = test.Where(x => !x.Equals("#4 element")).ToArray();
//Print test Now

,现在测试数组没有"#4元素"。

2日答而不是控制台。WriteLine使用控制台。写。

  1. 使用List<string>而不是数组
  2. 使用list.RemoveAt(3)删除第四个元素(元素从0开始)

因此,为了实现您想要的输出,您可能最终会得到如下内容:

var test = new List<string>();
for (var x = 1; x <= 5; x++)
{
    test.Add(String.Format("#{0} element", x));
}
Console.WriteLine(String.Join(" ", test);
test.RemoveAt(3);
Console.WriteLine(String.Join(" ", test);

这将给你你想要的输出:

#1 element #2 element #3 element #4 element #5 element

#1 element #2 element #3 element #5 element

供您编辑。在冲洗o/p时,不要冲洗过时的元素。使用一些条件运算符

如:1。如果您想在阵列阀的基础上删除,则使用

string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
    test[x] = "#" + (x + 1) + " element";
    If (test[x] == "Desired value which you dont want to show")
    Console.WriteLine(test[x]);
}
  • 如果你想根据数组的位置来删除,那么使用

    string[] test = new string[5];
    for(int x = 0; x <= test.Length - 1; x++)
    {
        test[x] = "#" + (x + 1) + " element";
        If (x == "Desired index which you dont want to show")
           Console.WriteLine(test[x]);
    }   
    
  • 虽然其他人写的是正确的,但有时你有一个数组,你不想有一个List<>

    public static void Main()
    {
        string[] test = new string[5];
        for(int x = 0; x < test.Length; x++)
        {
            test[x] = "#" + (x + 1) + " element";
            Console.WriteLine(test[x]);
        }
        Console.WriteLine();
        RemoveAt(ref test, 3);
        // Or RemoveRange(ref test, 3, 1);
        for(int x = 0; x < test.Length; x++)
        {
            Console.WriteLine(test[x]);
        }
    }
    public static void RemoveAt<T>(ref T[] array, int index)
    {
        RemoveRange(ref array, index, 1);
    }
    public static void RemoveRange<T>(ref T[] array, int start, int count)
    {
        if (array == null)
        {
            throw new ArgumentNullException("array");
        }
        if (start < 0 || start > array.Length)
        {
            throw new ArgumentOutOfRangeException("start");
        }
        if (count < 0 || start + count > array.Length)
        {
            throw new ArgumentOutOfRangeException("count");
        }
        if (count == 0)
        {
            return;
        }
        T[] orig = array;
        array = new T[orig.Length - count];
        Array.Copy(orig, 0, array, 0, start);
        Array.Copy(orig, start + count, array, start, array.Length - start);
    }
    

    两个简单的方法来删除数组的元素(RemoveAtRemoveRange),并给出了完整的使用示例。

    数组有固定的大小,所以如果你想从数组中添加或删除元素,你需要调整大小。因此,在c#中建议使用列表来代替(它们自己处理)。这是一篇关于数组与列表的好文章。

    但是如果你真的想用Array来做或者有这样做的理由,你可以这样做:

    class Program
    {
        static void Main(string[] args)
        {
            int[] myArray = { 1, 2, 3, 4, 5 };
            //destination array
            int[] newArray = new int[myArray.Length-1];
            //index of the element you want to delete
            var index = 3;
            //get and copy first 3 elements
            Array.Copy(myArray, newArray, index);
            //get and copy remaining elements without the 4th
            Array.Copy(myArray, index + 1, newArray, index, myArray.Length-(index+1));
    
            //Output newArray
            System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
            for (int i = 0; i < newArray.Length; i++)
            {
                sb.Append(String.Format("#{0} {1}", i + 1, newArray[i]));                        
                if (!(i == newArray.Length - 1))
                {
                    sb.Append(", ");
                }
            }
            Console.Write(sb.ToString());
            Console.ReadLine();
        }
    

    参见我的解决方案…如果有帮助,请告诉我……

    class Program
        {
            // this program will work only if you have distinct elements in your array
            static void Main(string[] args)
            {
                string[] test = new string[5];
                for (int x = 0; x <= test.Length - 1; x++)
                {
                    test[x] = "#" + (x + 1) + " element";
                    Console.WriteLine(test[x]);
                }
                Console.ReadKey();
                Program p = new Program();
                test = p.DeleteKey(test, "#3 element"); // pass the array and record to be deleted
                for (int x = 0; x <= test.Length - 1; x++)
                {
                    Console.WriteLine(test[x]);
                }
                Console.ReadKey();
            }
            public string[] DeleteKey(string[] arr, string str)
            {
                int keyIndex = 0;
                if (arr.Contains(str))
                {
                    for (int i = 0; i < arr.Length - 1; i++)
                    {
                        if (arr[i] == str)
                        {
                            keyIndex = i; // get the index position of string key
                            break; // break if index found, no need to search items for further
                        }
                    }
                    for (int i = keyIndex; i <= arr.Length - 2; i++)
                    {
                        arr[i] = arr[i+1]; // swap next elements till end of the array
                    }
                    arr[arr.Length - 1] = null; // set last element to null
                    return arr; // return array
                }
                else
                {
                    return null;
                }
            }
        }