Linked Questions

Popular Questions

There is a list of short. The values of it doesn't matter like:

List<short> resultTemp = new List<short>{1,2,3,4,5,6,7,8,9...};

This code should reduse the result list count by removing each Nth item from it.

Example 1:

List<short>{1,2,3,4,5,6,7,8,9,10}.Count == 10;
var targetItemsCount = 5;

result should be {1,3,5,7,9} and result.Count should be == 5

Example 2:

List<short>{1,2,3,4,5,6,7,8,9}.Count == 9;
var targetItemsCo:nt = 3;

result should be {1,4,7} and result.Count should be == 3

But it should stop to remove it, somewhere for make result count equal targetItemsCount (42 in this code, but its value else doesn't matter). The code is:

var currentItemsCount = resultTemp.Count;

var result = new List<short>();

var targetItemsCount = 42;
var counter = 0;
var counterResettable = 0;

if (targetItemsCount < currentItemsCount)
{
    var reduceIndex = (double)currentItemsCount / targetItemsCount;

    foreach (var item in resultTemp)
    {
        if (counterResettable < reduceIndex || 
            result.Count + 1 == currentItemsCount - counter)
        {
            result.Add(item);
            counterResettable++;
        }
        else
        {
            counterResettable = 0;
        }
        counter++;
    }
}

And the resault.Count in this example equals 41, but should be == targetItemsCount == 42;

Ho do I remove each N item in List untill List.Count more then target value with C#?

Related Questions