How to remove every N‑th element from a list in C#

1 Answer

0 votes
// ------------------------------------------------------------
// A small program demonstrating how to remove every Nth element
// from a List<T> using clear, expressive C# patterns.
// ------------------------------------------------------------

using System;
using System.Collections.Generic;

class Program
{
    /*
        This function returns a new list with every Nth element removed.

        It performs a single pass over the input list. Because List<T>
        uses zero‑based indexing, we check (index + 1) % n != 0 to keep
        elements that are *not* in the Nth position.

        The variable "size" captures the list length before the loop,
        which avoids repeatedly accessing items.Count inside the loop.
    */
    static List<T> RemoveEveryNth<T>(List<T> items, int n)
    {
        if (n <= 0)
            throw new ArgumentException("n must be a positive integer");

        int size = items.Count;              // capture size once
        var result = new List<T>(size);      // reserve capacity

        for (int i = 0; i < size; i++) {
            if ((i + 1) % n != 0) {
                result.Add(items[i]);
            }
        }

        return result;
    }

    /*
        Keeping Main small and focused makes the program easy to extend.
        Here we demonstrate the function with a simple example.
    */
    static void Main()
    {
        var data = new List<int>();
        for (int i = 1; i <= 20; i++) {
            data.Add(i);   // Example list: numbers 1–20
        }

        int n = 3;         // Remove every 3rd element

        var cleaned = RemoveEveryNth(data, n);

        Console.WriteLine("Original: " + string.Join(" ", data));
        Console.WriteLine("After removing every " + n + "-th element: " +
                          string.Join(" ", cleaned));
    }
}



/*
run:

Original: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After removing every 3-th element: 1 2 4 5 7 8 10 11 13 14 16 17 19 20

*/

 



answered Aug 15 by avibootz
...