Home
Search
VB.NET List ExamplesUse the List type: add, remove and get elements from Lists. Understand dynamic sizing of Lists.
List. The VB.NET List is a resizable array. It stores a variable number of elements in an expandable collection. And it changes its size as needed, on its own.
Type. The List type offers many useful methods. We add elements. We count elements. We can locate elements with IndexOf or Find. With special syntax we initialize lists.
Initialize List
First example. Here we create 2 Lists—each list has 4 elements: 4 Integers of the values 2, 3, 5 and 7. We call Add() to append to the end of the list. Count returns the length.
Of Integer The keywords "Of Integer" mean that the List will contain only Integers. Other types, even Objects, are not allowed in it.
Version 1 We call Add 4 times to add the 4 Integers. We access Count, and get the last element (which is 7) by subtracting 1 from Count.
Version 2 This code does the same thing as version 1, but it uses a shorter syntax form—the List initializer—to create the list.
Initialize List
VB.NET program that uses Add, Count, initializer
Module Module1 Sub Main() ' Version 1: create list of 4 Integers with Add. Dim list As New List(Of Integer) list.Add(2) list.Add(3) list.Add(5) list.Add(7) Console.WriteLine("LIST 1 COUNT: {0}", list.Count) Console.WriteLine("LIST 1 LAST: {0}", list(list.Count - 1)) ' Version 2: create list with initializer. Dim list2 As New List(Of Integer)({2, 3, 5, 7}) Console.WriteLine("LIST 2 COUNT: {0}", list2.Count) Console.WriteLine("LIST 2 LAST: {0}", list2(list2.Count - 1)) End Sub End Module
LIST 1 COUNT: 4 LIST 1 LAST: 7 LIST 2 COUNT: 4 LIST 2 LAST: 7
For Each, For. Looping is an important operation on Lists. We can use For-Each and For. When an index is not required, the For-Each loop is a better choice as it is simpler.
Part 1 We create a new List of Integers. Then, we add 3 integers to the List contents.
Part 2 We loop over the elements in the List with a For-Each loop construct. On each value, "number" refers to the current element.
Part 3 We use a For-loop. In the upper bound, we subtract 1 from list.Count. Item() gets each element by its index.
VB.NET program that uses For-Each and For, List
Module Module1 Sub Main() ' Part 1: create List and add 3 Integers. Dim list As New List(Of Integer) list.Add(2) list.Add(3) list.Add(7) ' Part 2: loop through List elements. For Each number As Integer In list Console.WriteLine("FOR EACH: {0}", number) Next ' Part 3: loop through list with a for-to loop. For i As Integer = 0 To list.Count - 1 Console.WriteLine("FOR: {0}", list.Item(i)) Next i End Sub End Module
FOR EACH: 2 FOR EACH: 3 FOR EACH: 7 FOR: 2 FOR: 3 FOR: 7
First, last. Often we have a List and want to access the first and last elements. The first element is at index 0. The last is at Count minus one.
VB.NET program that gets first, last elements
Module Program Sub Main() Dim items As New List(Of String)({"X", "T", "Z"}) ' Get first. Dim first As String = items(0) Console.WriteLine("FIRST: {0}", first) ' Get last. Dim last As String = items(items.Count - 1) Console.WriteLine(" LAST: {0}", last) End Sub End Module
FIRST: X LAST: Z
Count, Clear. The Count property returns the total number of elements in the List. The Clear function removes all the elements so that the next invocation of Count will return zero.
Here We use the Count property and the Clear function on the List type instance.
VB.NET program that uses Count and Clear
Module Module1 Sub Main() ' Create a list of booleans. Dim list As New List(Of Boolean) list.Add(True) list.Add(False) list.Add(True) ' Write the count. Console.WriteLine("COUNT: {0}", list.Count) ' Clear the list elements. list.Clear() ' Write the count again. Console.WriteLine("COUNT: {0}", list.Count) End Sub End Module
COUNT: 3 COUNT: 0
If-statement. We often need to scan (or loop) through the elements in the List and use logical tests on them. Perhaps we need to test each element against a specific value.
Tip To do this, we can use a For-Each loop and then an enclosed If-statement in the program.
VB.NET program that uses If, List elements
Module Module1 Sub Main() ' Create a list of 3 integers. Dim list As New List(Of Integer)(New Integer() {2, 3, 5}) ' Loop through each number in the list. ' ... Then check it against the integer 3. For Each num As Integer In list If (num = 3) Then Console.WriteLine("Contains 3") End If Next End Sub End Module
Contains 3
Join. The String.Join function combines an array of strings into a single string with a specific delimiter character dividing the parts. A List can be used with Join.
Note The .NET Framework provides a String.Join overload that accepts an argument of type IEnumerable.
Join
Here We convert a List into an array. We apply the ToArray extension and then pass as an argument this result to String.Join.
ToArray
VB.NET program that uses Join, List
Module Module1 Sub Main() ' Create a List of strings. ' ... Then use the String.Join method on it. Dim list As New List(Of String) list.Add("New York") list.Add("Mumbai") list.Add("Berlin") list.Add("Istanbul") Console.WriteLine(String.Join(",", list.ToArray)) End Sub End Module
New York,Mumbai,Berlin,Istanbul
Dictionary keys. The List and Dictionary collections can be used together. We can acquire a List of all of the keys from a Dictionary if needed.
Dictionary
Step 1 We create a Dictionary and add 2 keys to it—each key is an Integer, each value is a Boolean.
Step 2 We get the Keys by accessing the Keys property, and then create a new List with the List copy constructor.
Step 3 We use a For-Each loop to enumerate all the Integer keys, writing them to the screen.
VB.NET program that uses Keys and List
Module Module1 Sub Main() ' Step 1: create a dictionary, and add 2 pairs. Dim dictionary As New Dictionary(Of Integer, Boolean) dictionary.Add(3, True) dictionary.Add(5, False) ' Step 2: get the list of keys. Dim list As New List(Of Integer)(dictionary.Keys) ' Step 3: loop and display the keys. For Each number As Integer In list Console.WriteLine("KEY: {0}", number) Next End Sub End Module
KEY: 3 KEY: 5
Insert. The List is optimized for end-insertion with the Add function. But we can perform a slower insertion in the middle of the List if needed.
Argument 1 The first argument must be the desired index for the element. The index 1 will make the element the second element.
Argument 2 The second argument is the element to insert. Here we insert a dog breed name into our List.
VB.NET program that uses Insert method
Module Module1 Sub Main() ' Create a list of strings. Dim list As New List(Of String) list.Add("spaniel") list.Add("beagle") ' Insert a string into the list. list.Insert(1, "dalmatian") ' Loop through the entire list. For Each str As String In list Console.WriteLine(str) Next End Sub End Module
spaniel dalmatian beagle
AddRange, InsertRange. Suppose we want to append or insert an array of Integers into a List of Integers. We can use the AddRange or InsertRange Subs.
Tip The type of the array we insert (like Integer or String) must match the target List's element type.
Tip 2 We can insert one List into another with AddRange and InsertRange—the syntax is the same (just pass a list instead of an array).
VB.NET program that uses AddRange, InsertRange
Module Module1 Sub Main() ' Initial list. Dim list As List(Of Integer) = New List(Of Integer)({1, 2}) ' Add ints on the end. list.AddRange(New Integer() {3, 4}) ' Insert ints at the start. list.InsertRange(0, New Integer() {-2, -1}) ' Display final list. For Each value In list Console.WriteLine("FINAL LIST: {0}", value) Next End Sub End Module
FINAL LIST: -2 FINAL LIST: -1 FINAL LIST: 1 FINAL LIST: 2 FINAL LIST: 3 FINAL LIST: 4
GetRange. This function returns a range of elements within a List. We specify (as the first argument) the starting index of the range, and then the number of elements.
Step 1 We create a List of several strings. We specify string literals containing the names of rivers.
Step 2 We call GetRange in a For-Each loop—the loop only calls GetRange once, and it returns river names starting at the specified index.
VB.NET program that uses GetRange method
Module Module1 Sub Main() ' Step 1: create a List. Dim list As New List(Of String)( New String() {"nile", "amazon", "yangtze", "mississippi", "yellow"}) ' Step 2: call GetRange. ' ... Loop through the strings returned by GetRange. For Each value As String In list.GetRange(1, 2) Console.WriteLine("RIVER: {0}", value) Next End Sub End Module
RIVER: amazon RIVER: yangtze
Remove. This function removes the first matching element by value. When we pass the value 20 to Remove, the first matching element is removed from the List.
Note If we call Remove() with a value that is not found in the List, nothing happens.
VB.NET program that uses Remove
Module Module1 Sub Main() Dim numbers = New List(Of Integer)({10, 20, 30}) ' Remove this element by value. numbers.Remove(20) For Each number In numbers Console.WriteLine("NOT REMOVED: {0}", number) Next ' This will not change anything. numbers.Remove(3000) End Sub End Module
NOT REMOVED: 10 NOT REMOVED: 30
IndexOf. This function locates a value within a List. It searches from the first element and continues through to the last element.
Part A Here we call IndexOf and the value is located in the list. The value 20 occurs at index 1, so 1 is returned.
Part B We try to find 100, but it does not exist. IndexOf returns -1 if no matching value exists in the List.
VB.NET program that uses IndexOf
Module Module1 Sub Main() Dim sizes As List(Of Integer) = New List(Of Integer) sizes.Add(10) sizes.Add(20) sizes.Add(30) ' Part A: the value 20 occurs at the index 1. Dim index20 As Integer = sizes.IndexOf(20) Console.WriteLine(index20) ' Part B: the value 100 does not occur, so IndexOf returns -1. Dim index100 As Integer = sizes.IndexOf(100) If index100 = -1 Then Console.WriteLine("Not found") End If End Sub End Module
1 Not found
IEnumerable. The List (like an array) can be used as an IEnumerable type—we can pass List to methods where an IEnumerable is required. We can then loop over (with For Each) the collection.
Here We create a List and an array in Main. We pass those of those to the PrintElements Sub—it handles all IEnumerable types.
Tip Often we can use IEnumerable-receiving functions to share code that must act upon Lists and arrays.
VB.NET program that uses List with IEnumerable Interface
Module Module1 Sub Main() ' Create List and pass it as an IEnumerable. Dim list As List(Of Integer) = New List(Of Integer)({10, 20, 30}) PrintElements(list) ' Use array as an IEnumerable. Dim array As Integer() = {100, 200, 300} PrintElements(array) End Sub Sub PrintElements(ByVal elements As IEnumerable(Of Integer)) ' Handle elements in IEnumerable. For Each element In elements Console.WriteLine("Element: {0}", element) Next End Sub End Module
Element: 10 Element: 20 Element: 30 Element: 100 Element: 200 Element: 300
Find. We can also use the Find, FindIndex, FindLast and FindLastIndex functions. These provide a way for us to declaratively search a List. This reduces complexity.
List Find, Exists
BinarySearch. In a binary search, a value is located in a sorted list by testing positions in the list. The search then "hones" in on the value. This can optimize performance.
BinarySearch List
Duplicates. Unlike a Dictionary, a List can contain duplicate elements. This often can be a problem. We can remove these duplicates in many ways.
Duplicates
Convert. Often we must use custom methods to convert and modify List collections. We can convert a List into another type, like a Dictionary.
Convert Dictionary, List
Notes, Dictionary. If we have a List that we repeatedly search for a certain value, using a Dictionary may be faster. The hashing in a Dictionary can speed up access to keys.
Dictionary
A summary. The List type is a generic, constructed type. It has some performance advantages over other structures. In many programs, the List type is useful.
Home
© 2007-2021 sam allen.
see site info on the changelog.