如何删除数组的元素?

时间:2015-07-17 08:43:58

标签: c# arrays

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

第一个问题:

让我说我有一个阵列:

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
*/

并说我想删除&#34;#4元素&#34;来自字符串数组,因此它输出:

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

我该怎么做?

[PS:]我正在寻找的答案对初学者来说很容易理解。

8 个答案:

答案 0 :(得分:1)

如果要删除特定索引,可以执行以下操作:

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

答案 1 :(得分:0)

  1. 使用list.RemoveAt(3)而不是数组。
  2. 使用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); 删除第四个元素(元素从0开始)
  3. 所以你最终会得到类似下面的内容,以达到你想要的输出:

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

    这将为您提供所需的输出:

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

    echo $this->Html->css('bootstrap'); echo $this->Html->script('bootstrap');

答案 2 :(得分:0)

您无法从数组中删除元素,例如,您只能将其设置为""

改为使用List<string>

答案 3 :(得分:0)

第一个答案:

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

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

现在测试数组没有“#4元素”。

第二次答案 而不是Console.WriteLine使用Console.Write。

答案 4 :(得分:0)

进行编辑。冲洗你的o / p只是不要冲洗过时的元素。使用一些条件运算符。

例如:1。如果要在阵列阀的基础上移除,请使用

M12=M(:,:,1)>=M(:,:,2);
M13=M(:,:,1)>=M(:,:,3);
M_out(:,:,1)=M12.*M13

M21=M(:,:,2)>M(:,:,1); %"we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)"
M23=M(:,:,2)>=M(:,:,3);
M_out(:,:,2)=M21.*M23

M31=M(:,:,3)>M(:,:,1);% "we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)" 
M32=M(:,:,3)>M(:,:,2);% "we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)"
M_out(:,:,3)=M31.*M32

%%Checking
sum(M_out,3)
  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]);
    }
    

答案 5 :(得分:0)

虽然其他人写的是正确的,但有时你有一个数组,而你不想拥有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)的两种简单方法。

答案 6 :(得分:0)

数组具有固定大小,因此如果您想要添加或删除元素,则需要处理调整大小。因此,在C#中,建议使用Lists(它们自己处理它)。Here是关于Arrays vs Lists的好文章。

但是如果你真的想用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();

    }

答案 7 :(得分:0)

请参阅我的解决方案...让我知道是否有帮助...

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