-->

How can I swap two values of an array in c#?

2020-02-07 13:29发布

问题:

I have an array of int containing some values starting from index 0. I want to swap two values for example value of index 0 should be swapped with the value of index 1. How can I do this in the c# array?

回答1:

You could create an extension method that would work for any array

public static void SwapValues<T>(this T[] source, long index1, long index2)
{
    T temp = source[index1];
    source[index1] = source[index2];
    source[index2] = temp;
}


回答2:

If you really only want to swap, you can use this method:

public static bool swap(int x, int y, ref int[] array){

        // check for out of range
        if(array.Length <= y || array.Length <= x) return false;


        // swap index x and y
        var buffer = array[x];
        array[x] = array[y];
        array[y] = buffer;  


        return true;
}

x and y are the indizies, that should be swapped.

If you want to swap with any type of array, then you can do it like this:

public static bool swap<T>(this T[] objectArray, int x, int y){

        // check for out of range
        if(objectArray.Length <= y || objectArray.Length <= x) return false;


        // swap index x and y
        T buffer = objectArray[x];
        objectArray[x] = objectArray[y];
        objectArray[y] = buffer;


        return true;
}

And you can call it like:

string[] myArray = {"1", "2", "3", "4", "5", "6"};

if(!swap<string>(myArray, 0, 1)) {
    Console.WriteLine("x or y are out of range!");
    return;
}


回答3:

static void SwapInts(int[] array, int position1, int position2)
{      
    int temp = array[position1]; // Copy the first position's element
    array[position1] = array[position2]; // Assign to the second element
    array[position2] = temp; // Assign to the first element
}

call this function and print elemet



回答4:

swap only two values only once or want to do the same for the entire array.

Assuming that you only want to swap only two only once and is of type integer, then you can try this:

    int temp=0;
    temp=arr[0];
    arr[0]=arr[1];
    arr[1]=temp;


回答5:

I just wrote something similar, so here is a version that

  • uses generics so that it works on ints, strings etc,
  • uses extension methods
  • comes with a test class

Enjoy :)

[TestClass]
public class MiscTests
{
    [TestMethod]
    public void TestSwap()
    {
        int[] sa = {3, 2};
        sa.Swap(0, 1);
        Assert.AreEqual(sa[0], 2);
        Assert.AreEqual(sa[1], 3);
    }
}

public static class SwapExtension
{
    public static void Swap<T>(this T[] a, int i1, int i2)
    {
        T t = a[i1]; 
        a[i1] = a[i2]; 
        a[i2] = t; 
    }
}