Dim
Dim

Reputation: 453

Add item in list in specific position

I'm trying to find if i can add an item in list in specific position. Example

string[] tokens= new string[10];
tokens[5]="TestString";

when i'm trying this to list

 List<string> mitems = new List<string>();
 mitems.Insert(5, "TestString");

I'm getting error list inside a list index out of range. Is there any relative to this for a list?

Upvotes: 3

Views: 17388

Answers (4)

ryans610
ryans610

Reputation: 11

You can use List<T>.Insert(int, T) method to do that, example:

var tokens = new List<string>();
for (int i = 0; i < 10; i++)
    tokens.Add(string.Empty);
tokens.Insert(5, "TestString"); 

See MSDN

Edit: If you were just trying to replace the item in index of 5, than the [] will also do the trick as following example:

var tokens = new List<string>(10);
for (int i = 0; i < 10; i++)
    tokens.Add(string.Empty);
tokens[5] = "TestString";

Upvotes: 0

ManishM
ManishM

Reputation: 593

Following adds default values of string at every index from 0-9

string[] tokens= new string[10];

But list is created on heap nothing instantiated. No default assigned values.

List<string> mitems = new List<string>();

If you try following it will fail as there are no values at 0-5

mitems.Insert(5, "TestString");

If you do following it will work

mitems.Insert(0, "TestString");

Upvotes: 0

taimur alam
taimur alam

Reputation: 576

private static void Myfunc()
    {
        List<string> l = new List<string>();
        string opt = "y";
        while (opt == "y")
        {
            Console.WriteLine("Do you want to add in a specific position? (y/n)");
            string pos = Console.ReadLine();
            if (pos == "y")
            {
                Console.WriteLine("Which index you want to add?");
                int index = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine("Add items in {0}", index);
                l.Insert(index, Console.ReadLine());
            }
            else
            {
                Console.WriteLine("Enter to add in a list");
                l.Add(Console.ReadLine());
                Console.WriteLine("Do you wish to continue? (y/n)");
                opt = Console.ReadLine();
            }
            Console.WriteLine("Do you want to print the list? (y/n)");
            string print = Console.ReadLine();
            if (print == "y")
            {
                foreach (var item in l)
                {
                    Console.WriteLine(item);
                }
            }

        }

I wrote this function for you. Add this function to a console app for better understanding how list works for insert and append

EDIT 1:

I just saw your edit, another way of initializing a list with default values and then insert something in a certain position would be by initializing the list like this :-

List<string> l = Enumerable.Repeat("something blank", 10).ToList();

And then add to an index of your choice

Upvotes: 0

Mighty Badaboom
Mighty Badaboom

Reputation: 6155

Use the Insert(index, item); method.

Have a look at MSDN Insert for more information.

But you will get an error when you're trying to insert an item at an index which is not existing.

You could init your list with 10 empty values like you did with your array but if you use Insert a new entry is created and not an old replaced like with a dictionary. That would mean you would have 11 entries after the first use of Insert

This example code

var items = new List<string>();
items.AddRange(Enumerable.Repeat(string.Empty, 10));
Console.WriteLine(items.Count);
items.Insert(5, "TestString");
Console.WriteLine(items.Count);

gives this output (for better understanding):

10

11

Upvotes: 3

Related Questions