Remove element of a regular array

前端 未结 15 2231
野性不改
野性不改 2020-11-22 10:06

I have an array of Foo objects. How do I remove the second element of the array?

I need something similar to RemoveAt() but for a regular array.

相关标签:
15条回答
  • 2020-11-22 10:48

    As usual, I'm late to the party...

    I'd like to add another option to the nice solutions list already present. =)
    I would see this as a good opportunity for Extensions.

    Reference: http://msdn.microsoft.com/en-us/library/bb311042.aspx

    So, we define some static class and in it, our Method.
    After that, we can use our extended method willy-nilly. =)

    using System;
    
    namespace FunctionTesting {
    
        // The class doesn't matter, as long as it's static
        public static class SomeRandomClassWhoseNameDoesntMatter {
    
            // Here's the actual method that extends arrays
            public static T[] RemoveAt<T>( this T[] oArray, int idx ) {
                T[] nArray = new T[oArray.Length - 1];
                for( int i = 0; i < nArray.Length; ++i ) {
                    nArray[i] = ( i < idx ) ? oArray[i] : oArray[i + 1];
                }
                return nArray;
            }
        }
    
        // Sample usage...
        class Program {
            static void Main( string[] args ) {
                string[] myStrArray = { "Zero", "One", "Two", "Three" };
                Console.WriteLine( String.Join( " ", myStrArray ) );
                myStrArray = myStrArray.RemoveAt( 2 );
                Console.WriteLine( String.Join( " ", myStrArray ) );
                /* Output
                 * "Zero One Two Three"
                 * "Zero One Three"
                 */
    
                int[] myIntArray = { 0, 1, 2, 3 };
                Console.WriteLine( String.Join( " ", myIntArray ) );
                myIntArray = myIntArray.RemoveAt( 2 );
                Console.WriteLine( String.Join( " ", myIntArray ) );
                /* Output
                 * "0 1 2 3"
                 * "0 1 3"
                 */
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 10:48

    In a normal array you have to shuffle down all the array entries above 2 and then resize it using the Resize method. You might be better off using an ArrayList.

    0 讨论(0)
  • 2020-11-22 10:48

    First step
    You need to convert the array into a list, you could write an extension method like this

    // Convert An array of string  to a list of string
    public static List<string> ConnvertArrayToList(this string [] array) {
    
        // DECLARE a list of string and add all element of the array into it
    
        List<string> myList = new List<string>();
        foreach( string s in array){
            myList.Add(s);
        }
        return myList;
    } 
    

    Second step
    Write an extension method to convert back the list into an array

    // convert a list of string to an array 
    public static string[] ConvertListToArray(this List<string> list) {
    
        string[] array = new string[list.Capacity];
        array = list.Select(i => i.ToString()).ToArray();
        return array;
    }
    

    Last steps
    Write your final method, but remember to remove the element at index before converting back to an array like the code show

    public static string[] removeAt(string[] array, int index) {
    
        List<string> myList = array.ConnvertArrayToList();
        myList.RemoveAt(index);
        return myList.ConvertListToArray();
    } 
    

    examples codes could be find on my blog, keep tracking.

    0 讨论(0)
提交回复
热议问题