简体   繁体   中英

Excluding one item from list (by Index), and take all others

There is a List<int> containing some set of numbers. Randomly I select an index, which will be processed separately (call it master ). Now, I want to exclude this particular index, and get all other elements of List (call them slave ).

var items = new List<int> { 55, 66, 77, 88, 99 };
int MasterIndex = new Random().Next(0, items .Count);

var master = items.Skip(MasterIndex).First();

// How to get the other items into another List<int> now? 
/*  -- items.Join;
    -- items.Select;
    -- items.Except */

Join , Select , Except - any of them, and how?

EDIT: Cannot remove any item from the original list, otherwise I have to keep two lists.

Use Where :-

var result = numbers.Where((v, i) => i != MasterIndex).ToList();

Working Fiddle .

You could remove Master item from the list,

List<int> newList = items.RemoveAt(MasterIndex);

RemoveAt() removes the item from the original list, So it's not necessary to assign the collection to a new list. After calling RemoveAt(), items.Contains(MasterItem) would return false .

If performance is an issue you may prefer to use the List.CopyTo method like this.

List<T> RemoveOneItem1<T>(List<T> list, int index)
{
    var listCount = list.Count;

    // Create an array to store the data.
    var result = new T[listCount - 1];

    // Copy element before the index.
    list.CopyTo(0, result, 0, index);

    // Copy element after the index.
    list.CopyTo(index + 1, result, index, listCount - 1 - index);

    return new List<T>(result);
}

This implementation is almost 3 times faster than @RahulSingh answer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM