diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArray.Benchmark.csproj b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArray.Benchmark.csproj index 6cb16c7c9f..6cf2d5e433 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArray.Benchmark.csproj +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArray.Benchmark.csproj @@ -2,13 +2,13 @@ Exe - net7.0 + net11.0 enable enable - + diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArrayBenchmark.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArrayBenchmark.cs index c916a61c2c..0591341131 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArrayBenchmark.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/DeleteElementsFromArrayBenchmark.cs @@ -1,179 +1,59 @@ using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Order; -using System.Buffers; +using DeleteElementsFromAnArray; -namespace BenchmarkRunner -{ - - [MemoryDiagnoser] - [Orderer(SummaryOrderPolicy.FastestToSlowest)] - [RankColumn] - public class DeleteElementsFromAnArrayBenchmark - { - private readonly int[] _myArray = FillArray(); - - private readonly int _key = 7; - - [Benchmark] - public int[] DeleteWithFindAll() - { - return Array.FindAll(_myArray, i => i != _key); - } - - [Benchmark] - public int[] DeleteWithRemoveAll() - { - var list = new List(_myArray); - list.RemoveAll(e => e == _key); - - return list.ToArray(); - } - - [Benchmark] - public int[] DeleteWithList() - { - var indexToRemove = Array.IndexOf(_myArray, _key); - - if (indexToRemove < 0) - { - return _myArray; - } - - var list = new List(_myArray.Length); - - for (int i = 0; i < _myArray.Length; i++) - { - if (_myArray[i] != _key) - { - list.Add(_myArray[i]); - } - } - - return list.ToArray(); - } - - [Benchmark] - public int[] DeleteWithWhere() - { - return _myArray.Where(e => e != _key).ToArray(); - } +namespace BenchmarkRunner; - [Benchmark] - public int[] DeleteWithArrayCopy() - { - var indexToRemove = Array.IndexOf(_myArray, _key); - - if (indexToRemove < 0) - { - return _myArray; - } - - var tempArray = new int[_myArray.Length - 1]; - - Array.Copy(_myArray, 0, tempArray, 0, indexToRemove); - - Array.Copy(_myArray, indexToRemove + 1, tempArray, indexToRemove, _myArray.Length - indexToRemove - 1); - - return tempArray; - } +[InProcess] +[MemoryDiagnoser] +[Orderer(SummaryOrderPolicy.FastestToSlowest)] +[RankColumn] +public class DeleteElementsFromAnArrayBenchmark +{ + private readonly int[] _myArray = FillArray(); - [Benchmark] - public int[] DeleteWithBufferCopy() - { - var indexToRemove = Array.IndexOf(_myArray, _key); + private readonly int _key = 7; - if (indexToRemove < 0) - { - return _myArray; - } + [Benchmark] + public int[] DeleteWithArrayCopy() => Methods.DeleteWithArrayCopy(_myArray, _key); - var tempArray = new int[_myArray.Length - 1]; + [Benchmark] + public int[] DeleteWithBufferCopy() => Methods.DeleteWithBufferCopy(_myArray, _key); - Buffer.BlockCopy(_myArray, 0, tempArray, 0, indexToRemove * 4); + [Benchmark] + public int[] DeleteWithArraySegment() => Methods.DeleteWithArraySegment(_myArray, _key); - Buffer.BlockCopy(_myArray, (indexToRemove + 1) * 4, tempArray, indexToRemove * 4, (_myArray.Length - indexToRemove - 1) * 4); + [Benchmark] + public int[] DeleteWithLoop() => Methods.DeleteWithLoop(_myArray, _key); - return tempArray; - } + [Benchmark] + public int[] DeleteWithCollectionExpression() => Methods.DeleteWithCollectionExpression(_myArray, _key); - [Benchmark] - public int[] DeleteWithArraySegment() - { - var indexToRemove = Array.IndexOf(_myArray, _key); + [Benchmark] + public int[] DeleteWithFindAll() => Methods.DeleteWithFindAll(_myArray, _key); - if (indexToRemove < 0) - { - return _myArray; - } + [Benchmark] + public int[] DeleteWithWhere() => Methods.DeleteWithWhere(_myArray, _key); - int[] tempArray; + [Benchmark] + public int[] DeleteWithRemoveAll() => Methods.DeleteWithRemoveAll(_myArray, _key); - var segment1 = new ArraySegment(_myArray, 0, indexToRemove); + [Benchmark] + public int[] DeleteWithList() => Methods.DeleteWithList(_myArray, _key); - var segment2 = new ArraySegment(_myArray, indexToRemove + 1, _myArray.Length - indexToRemove - 1); + [Benchmark] + public int[] DeleteWithPooledArray() => Methods.DeleteWithPooledArray(_myArray, _key); - tempArray = segment1.Concat(segment2).ToArray(); - - return tempArray; - } - - [Benchmark] - public int[] DeleteWithLoop() - { - var indexToRemove = Array.IndexOf(_myArray, _key); - - if (indexToRemove < 0) - { - return _myArray; - } - - var tempArray = new int[_myArray.Length - 1]; - - for (int i = 0, j = 0; i < _myArray.Length; i++) - { - if (i == indexToRemove) - { - continue; - } - tempArray[j] = _myArray[i]; - j++; - } - - return tempArray; - } + private static int[] FillArray() + { + var rnd = new Random(42); + var myArray = new int[1000]; - [Benchmark] - public int[] DeleteWithPooledArray() + for (int i = 0; i < 1000; i++) { - var tempArray = ArrayPool.Shared.Rent(_myArray.Length); - try - { - var tempSpan = tempArray.AsSpan(); - var index = 0; - foreach (var element in _myArray.AsSpan()) - { - if (element != _key) tempSpan[index++] = element; - } - - return tempSpan[0..index].ToArray(); - } - finally - { - ArrayPool.Shared.Return(tempArray); - } + myArray[i] = rnd.Next(1, 10); } - private static int[] FillArray() - { - var rnd = new Random(); - var myArray = new int[1000]; - - for (int i = 0; i < 1000; i++) - { - myArray[i] = rnd.Next(1, 10); - } - - return myArray; - } + return myArray; } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/Program.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/Program.cs index 472c2e8e3b..940ed311e2 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/Program.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray.Benchmark/Program.cs @@ -1,3 +1,4 @@ -using BenchmarkRunner; +using BenchmarkDotNet.Running; +using BenchmarkRunner; -BenchmarkDotNet.Running.BenchmarkRunner.Run(); \ No newline at end of file +BenchmarkSwitcher.FromAssembly(typeof(DeleteElementsFromAnArrayBenchmark).Assembly).Run(args); diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/DeleteElementsFromArray.csproj b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/DeleteElementsFromArray.csproj index f02677bf64..5bf6c9b8cf 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/DeleteElementsFromArray.csproj +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/DeleteElementsFromArray.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net11.0 enable enable diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArrayCopy.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArrayCopy.cs index 759a596472..155552f6de 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArrayCopy.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArrayCopy.cs @@ -1,23 +1,21 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithArrayCopy(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithArrayCopy(int[] inputArray, int elementToRemove) - { - var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - - if(indexToRemove < 0) - { - return inputArray; - } + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - var newArray = new int[inputArray.Length - 1]; + if (indexToRemove < 0) + { + return inputArray; + } - Array.Copy(inputArray, 0, newArray, 0, indexToRemove); + var tempArray = new int[inputArray.Length - 1]; - Array.Copy(inputArray, indexToRemove + 1, newArray, indexToRemove, inputArray.Length - indexToRemove - 1); + Array.Copy(inputArray, 0, tempArray, 0, indexToRemove); + Array.Copy(inputArray, indexToRemove + 1, tempArray, indexToRemove, inputArray.Length - indexToRemove - 1); - return newArray; - } + return tempArray; } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArraySegment.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArraySegment.cs index 94b3039667..2c334eace9 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArraySegment.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithArraySegment.cs @@ -1,25 +1,19 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithArraySegment(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithArraySegment(int[] inputArray, int elementToRemove) - { - var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - - if (indexToRemove < 0) - { - return inputArray; - } - - int[] tempArray; - - var segment1 = new ArraySegment(inputArray, 0, indexToRemove); + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - var segment2 = new ArraySegment(inputArray, indexToRemove + 1, inputArray.Length - indexToRemove - 1); + if (indexToRemove < 0) + { + return inputArray; + } - tempArray = segment1.Concat(segment2).ToArray(); + var segment1 = new ArraySegment(inputArray, 0, indexToRemove); + var segment2 = new ArraySegment(inputArray, indexToRemove + 1, inputArray.Length - indexToRemove - 1); - return tempArray; - } + return segment1.Concat(segment2).ToArray(); } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithBufferCopy.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithBufferCopy.cs index 8a2a2b5c4f..ef6b24364d 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithBufferCopy.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithBufferCopy.cs @@ -1,23 +1,26 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithBufferCopy(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithBufferCopy(int[] inputArray, int elementToRemove) - { - var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - if (indexToRemove < 0) - { - return inputArray; - } + if (indexToRemove < 0) + { + return inputArray; + } - var tempArray = new int[inputArray.Length - 1]; + var tempArray = new int[inputArray.Length - 1]; - Buffer.BlockCopy(inputArray, 0, tempArray, 0, indexToRemove * 4); + Buffer.BlockCopy(inputArray, 0, tempArray, 0, indexToRemove * sizeof(int)); - Buffer.BlockCopy(inputArray, (indexToRemove + 1) * 4, tempArray, indexToRemove * 4, (inputArray.Length - indexToRemove - 1) * 4); + Buffer.BlockCopy(inputArray, + (indexToRemove + 1) * sizeof(int), + tempArray, + indexToRemove * sizeof(int), + (inputArray.Length - indexToRemove - 1) * sizeof(int)); - return tempArray; - } + return tempArray; } } diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithCollectionExpression.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithCollectionExpression.cs new file mode 100644 index 0000000000..1336940e5c --- /dev/null +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithCollectionExpression.cs @@ -0,0 +1,23 @@ +namespace DeleteElementsFromAnArray; + +public static partial class Methods +{ + public static int[] DeleteWithCollectionExpression(int[] inputArray, int elementToRemove) + { + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + + if (indexToRemove < 0) + { + return inputArray; + } + + var span = inputArray.AsSpan(); + + return [.. span[..indexToRemove], .. span[(indexToRemove + 1)..]]; + } + + public static int[] DeleteFirstElement(int[] inputArray) + { + return inputArray[1..]; + } +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithFindAllMethod.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithFindAllMethod.cs index f1c5930784..5d2631016b 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithFindAllMethod.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithFindAllMethod.cs @@ -1,10 +1,9 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithFindAll(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithFindAll(int[] inputArray, int elementToRemove) - { - return Array.FindAll(inputArray, i => i != elementToRemove); - } + return Array.FindAll(inputArray, i => i != elementToRemove); } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithList.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithList.cs index 8d4d6cb428..3cbd93f072 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithList.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithList.cs @@ -1,27 +1,26 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithList(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithList(int[] inputArray, int elementToRemove) - { - var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); - if (indexToRemove < 0) - { - return inputArray; - } + if (indexToRemove < 0) + { + return inputArray; + } - var list = new List(inputArray.Length); + var list = new List(inputArray.Length); - for (int i = 0; i < inputArray.Length; i++) + for (int i = 0; i < inputArray.Length; i++) + { + if (inputArray[i] != elementToRemove) { - if (inputArray[i] != elementToRemove) - { - list.Add(inputArray[i]); - } + list.Add(inputArray[i]); } - - return list.ToArray(); } + + return list.ToArray(); } } diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithLoopMethod.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithLoopMethod.cs index 6caa8cf7a8..db405e1e8f 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithLoopMethod.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithLoopMethod.cs @@ -1,29 +1,42 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithLoop(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithLoop(int[] inputArray, int elementToRemove) + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + + if (indexToRemove < 0) { - var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + return inputArray; + } - if (indexToRemove < 0) + var tempArray = new int[inputArray.Length - 1]; + + for (int i = 0, j = 0; i < inputArray.Length; i++) + { + if (i == indexToRemove) { - return inputArray; + continue; } + tempArray[j] = inputArray[i]; + j++; + } - var tempArray = new int[inputArray.Length - 1]; + return tempArray; + } - for (int i = 0, j = 0; i < inputArray.Length; i++) + public static void DeleteWithLoopAndResize(ref int[] inputArray, int elementToRemove) + { + var indexToRemove = Array.IndexOf(inputArray, elementToRemove); + if (indexToRemove >= 0) + { + for (int i = indexToRemove; i < inputArray.Length - 1; i++) { - if (i == indexToRemove) - { - continue; - } - tempArray[j] = inputArray[i]; - j++; + inputArray[i] = inputArray[i + 1]; } - return tempArray; + Array.Resize(ref inputArray, inputArray.Length - 1); } } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithPooledArray.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithPooledArray.cs index d14bbb7f3c..417a2bec24 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithPooledArray.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithPooledArray.cs @@ -1,27 +1,26 @@ using System.Buffers; -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithPooledArray(int[] source, int elementToRemove) { - public static int[] DeleteWithPooledArray(int[] source, int elementToRemove) + var tempArray = ArrayPool.Shared.Rent(source.Length); + try { - var tempArray = ArrayPool.Shared.Rent(source.Length); - try - { - var tempSpan = tempArray.AsSpan(); - var index = 0; - foreach (var element in source.AsSpan()) - { - if (element != elementToRemove) tempSpan[index++] = element; - } - - return tempSpan[0..index].ToArray(); - } - finally + var tempSpan = tempArray.AsSpan(); + var index = 0; + foreach (var element in source.AsSpan()) { - ArrayPool.Shared.Return(tempArray); + if (element != elementToRemove) tempSpan[index++] = element; } + + return tempSpan[0..index].ToArray(); + } + finally + { + ArrayPool.Shared.Return(tempArray); } } } diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithRemoveAllMethod.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithRemoveAllMethod.cs index f080db7c3b..653dd40597 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithRemoveAllMethod.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithRemoveAllMethod.cs @@ -1,13 +1,12 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithRemoveAll(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithRemoveAll(int[] inputArray, int elementToRemove) - { - var list = new List(inputArray); - list.RemoveAll(e => e == elementToRemove); - - return list.ToArray(); - } + var list = new List(inputArray); + list.RemoveAll(e => e == elementToRemove); + + return list.ToArray(); } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithWhereMethod.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithWhereMethod.cs index 1df7309635..0f3a6019ba 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithWhereMethod.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Methods/DeleteWithWhereMethod.cs @@ -1,10 +1,9 @@ -namespace DeleteElementsFromAnArray +namespace DeleteElementsFromAnArray; + +public static partial class Methods { - public static partial class Methods + public static int[] DeleteWithWhere(int[] inputArray, int elementToRemove) { - public static int[] DeleteWithWhere(int[] inputArray, int elementToRemove) - { - return inputArray.Where(e => e != elementToRemove).ToArray(); - } + return inputArray.Where(e => e != elementToRemove).ToArray(); } -} \ No newline at end of file +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Program.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Program.cs index f6f826f44b..2b65f67e3a 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Program.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArray/Program.cs @@ -1,18 +1,26 @@ using static DeleteElementsFromAnArray.Methods; -var array = new int[] { 3, 4, 5, 3, 5, 7 }; +int[] array = [3, 4, 5, 3, 5, 7]; var elementToDelete = 3; -Console.WriteLine("Initial Array: " + String.Join(",", array) + " Element to delete: "+ elementToDelete); +Console.WriteLine("Initial Array: " + string.Join(",", array) + " Element to delete: " + elementToDelete); Console.WriteLine("Remove first instance of element: "); -Console.WriteLine("With ArrayCopy: " + String.Join(",", DeleteWithArrayCopy(array, elementToDelete))); -Console.WriteLine("With ArraySegment: " + String.Join(",", DeleteWithArraySegment(array, elementToDelete))); -Console.WriteLine("With Loop: " + String.Join(",", DeleteWithLoop(array, elementToDelete))); -Console.WriteLine("With BufferCopy: " + String.Join(",", DeleteWithBufferCopy(array, elementToDelete))); +Console.WriteLine("With ArrayCopy: " + string.Join(",", DeleteWithArrayCopy(array, elementToDelete))); +Console.WriteLine("With ArraySegment: " + string.Join(",", DeleteWithArraySegment(array, elementToDelete))); +Console.WriteLine("With Loop: " + string.Join(",", DeleteWithLoop(array, elementToDelete))); +Console.WriteLine("With BufferCopy: " + string.Join(",", DeleteWithBufferCopy(array, elementToDelete))); +Console.WriteLine("With CollectionExpression: " + string.Join(",", DeleteWithCollectionExpression(array, elementToDelete))); + +var resizedArray = (int[])array.Clone(); +DeleteWithLoopAndResize(ref resizedArray, elementToDelete); +Console.WriteLine("With Loop and Resize: " + string.Join(",", resizedArray)); Console.WriteLine("Remove every instance of the element: "); -Console.WriteLine("With FindAll: " + String.Join(",", DeleteWithFindAll(array, elementToDelete))); -Console.WriteLine("With Where: " + String.Join(",", DeleteWithWhere(array, elementToDelete))); -Console.WriteLine("With RemoveAll: " + String.Join(",", DeleteWithRemoveAll(array, elementToDelete))); -Console.WriteLine("With List: " + String.Join(",", DeleteWithList(array, elementToDelete))); -Console.WriteLine("With Pooled Array: " + String.Join(",", DeleteWithPooledArray(array, elementToDelete))); \ No newline at end of file +Console.WriteLine("With FindAll: " + string.Join(",", DeleteWithFindAll(array, elementToDelete))); +Console.WriteLine("With Where: " + string.Join(",", DeleteWithWhere(array, elementToDelete))); +Console.WriteLine("With RemoveAll: " + string.Join(",", DeleteWithRemoveAll(array, elementToDelete))); +Console.WriteLine("With List: " + string.Join(",", DeleteWithList(array, elementToDelete))); +Console.WriteLine("With Pooled Array: " + string.Join(",", DeleteWithPooledArray(array, elementToDelete))); + +Console.WriteLine("Remove the first element: " + string.Join(",", DeleteFirstElement(array))); +Console.WriteLine("Initial Array after all calls: " + string.Join(",", array)); diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/DeleteElementsFromArrayUnitTests.cs b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/DeleteElementsFromArrayUnitTests.cs index 20b034a45c..dd56aa0b26 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/DeleteElementsFromArrayUnitTests.cs +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/DeleteElementsFromArrayUnitTests.cs @@ -1,178 +1,216 @@ using DeleteElementsFromAnArray; -namespace Tests +namespace Tests; + +[TestClass] +public class DeleteElementsFromArrayUnitTests { - [TestClass] - public class DefaultValueFromDictionaryUnitTests - { - private readonly int[] _myArray = new int[] { 3, 4, 5, 3, 5, 7 }; - - [TestMethod] - public void GivenMethodFindAll_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 5, 7 }; - var value = Methods.DeleteWithFindAll(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - - [TestMethod] - public void GivenMethodFindAll_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithFindAll(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodWhere_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 5, 7 }; - var value = Methods.DeleteWithWhere(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodWhere_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithWhere(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodRemoveAll_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 5, 7 }; - var value = Methods.DeleteWithRemoveAll(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodRemoveAll_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithRemoveAll(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodLoop_WhenDeleteElement3_ThenArray45357() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithLoop(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodLoop_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithLoop(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodArrayCopy_WhenDeleteElement3_ThenArray45357() { - var key = 3; - var expectedResult = new int[] { 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithArrayCopy(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodArrayCopy_WhenDeleteElement6_ThenArray345357() { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithArrayCopy(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodArraySegment_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithArraySegment(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodArraySegment_WhenDeleteElement6_ThenArray345357() { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithArraySegment(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodBufferCopy_WhenDeleteElement3_ThenArray45357() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithBufferCopy(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodBufferCopy_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithBufferCopy(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodList_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 5, 7 }; - var value = Methods.DeleteWithList(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenMethodList_WhenDeleteElement6_ThenArray345357() - { - var key = 6; - var expectedResult = new int[] { 3, 4, 5, 3, 5, 7 }; - var value = Methods.DeleteWithList(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - - [TestMethod] - public void GivenPooledArray_WhenDeleteElement3_ThenArray4557() - { - var key = 3; - var expectedResult = new int[] { 4, 5, 5, 7 }; - var value = Methods.DeleteWithPooledArray(_myArray, key); - - CollectionAssert.AreEqual(value, expectedResult); - } - } -} \ No newline at end of file + private readonly int[] _myArray = [3, 4, 5, 3, 5, 7]; + + [TestMethod] + public void GivenMethodFindAll_WhenDeleteElement3_ThenArray4557() + { + var value = Methods.DeleteWithFindAll(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodFindAll_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithFindAll(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodWhere_WhenDeleteElement3_ThenArray4557() + { + var value = Methods.DeleteWithWhere(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodWhere_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithWhere(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodRemoveAll_WhenDeleteElement3_ThenArray4557() + { + var value = Methods.DeleteWithRemoveAll(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodRemoveAll_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithRemoveAll(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodLoop_WhenDeleteElement3_ThenArray45357() + { + var value = Methods.DeleteWithLoop(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodLoop_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithLoop(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodLoopAndResize_WhenDeleteElement3_ThenArray45357() + { + var array = (int[])_myArray.Clone(); + + Methods.DeleteWithLoopAndResize(ref array, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, array); + } + + [TestMethod] + public void GivenMethodLoopAndResize_WhenDeleteElement6_ThenArray345357() + { + var array = (int[])_myArray.Clone(); + + Methods.DeleteWithLoopAndResize(ref array, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, array); + } + + [TestMethod] + public void GivenMethodArrayCopy_WhenDeleteElement3_ThenArray45357() + { + var value = Methods.DeleteWithArrayCopy(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodArrayCopy_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithArrayCopy(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodArraySegment_WhenDeleteElement3_ThenArray45357() + { + var value = Methods.DeleteWithArraySegment(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodArraySegment_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithArraySegment(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodBufferCopy_WhenDeleteElement3_ThenArray45357() + { + var value = Methods.DeleteWithBufferCopy(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodBufferCopy_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithBufferCopy(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodCollectionExpression_WhenDeleteElement3_ThenArray45357() + { + var value = Methods.DeleteWithCollectionExpression(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodCollectionExpression_WhenDeleteElement7_ThenArray34535() + { + var value = Methods.DeleteWithCollectionExpression(_myArray, 7); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5 }, value); + } + + [TestMethod] + public void GivenMethodCollectionExpression_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithCollectionExpression(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodList_WhenDeleteElement3_ThenArray4557() + { + var value = Methods.DeleteWithList(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 5, 7 }, value); + } + + [TestMethod] + public void GivenMethodList_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithList(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenPooledArray_WhenDeleteElement3_ThenArray4557() + { + var value = Methods.DeleteWithPooledArray(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 4, 5, 5, 7 }, value); + } + + [TestMethod] + public void GivenPooledArray_WhenDeleteElement6_ThenArray345357() + { + var value = Methods.DeleteWithPooledArray(_myArray, 6); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenAnArray_WhenDeleteFirstElement_ThenArray45357() + { + var value = Methods.DeleteFirstElement(_myArray); + + CollectionAssert.AreEqual(new int[] { 4, 5, 3, 5, 7 }, value); + } + + [TestMethod] + public void GivenAnyDeleteMethod_WhenDeleteElement3_ThenInputArrayIsUnchanged() + { + Methods.DeleteWithArrayCopy(_myArray, 3); + Methods.DeleteWithCollectionExpression(_myArray, 3); + Methods.DeleteWithWhere(_myArray, 3); + Methods.DeleteWithPooledArray(_myArray, 3); + + CollectionAssert.AreEqual(new int[] { 3, 4, 5, 3, 5, 7 }, _myArray); + } +} diff --git a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/Tests.csproj b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/Tests.csproj index fda5d38102..495e6cc504 100644 --- a/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/Tests.csproj +++ b/collections-arrays/DeleteElementsFromArray/DeleteElementsFromArrayUnitTests/Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net11.0 enable enable @@ -9,10 +9,10 @@ - - - - + + + +