How can I swap two values of an array in C#?
Solution 1
Use a tuple:
int[] arr = { 1, 2, 3 };
(arr[0], arr[1]) = (arr[1], arr[0]);
Console.WriteLine(string.Format($"{arr[0]} {arr[1]} {arr[2]}")); // 2 1 3
Tuples are available in C# 7.0. See Tuple types (C# reference).
Solution 2
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;
}
Solution 3
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 temp = array[x];
array[x] = array[y];
array[y] = temp;
return true;
}
x and y are the array indexes to 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 temp = objectArray[x];
objectArray[x] = objectArray[y];
objectArray[y] = temp ;
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!");
}
else {
//print myArray content (values will be swapped)
}
Solution 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;
Solution 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;
}
}
Comments
-
Naveed Aheer almost 2 years
I have an array of int containing some values starting from index 0. I want to swap two values, for example, the value of index 0 should be swapped with the value of index 1. How can I do this in the C# array?
-
Peter Mortensen about 2 yearsIt is the XOR swap algorithm.
-
Mauricio Gracia Gutierrez about 2 yearsI have updated the answer