Skip to main content

C# Array Methods

Arrays in C# come with a variety of built-in methods that can help you manipulate, search, and transform data efficiently. Understanding these methods is essential for effective programming as they save time and reduce the need for custom implementation of common operations.

Introduction to Array Methods

In C#, arrays are objects derived from the System.Array class, which provides numerous methods to work with array data. These methods allow you to perform operations like sorting, searching, copying, and resizing arrays without having to write complex algorithms yourself.

Let's explore the most commonly used array methods in C#, with examples to demonstrate their usage.

Basic Array Methods

Array.Length Property

While not a method, Length is an essential property that returns the total number of elements in an array.

csharp
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine($"Array length: {numbers.Length}");

// Output:
// Array length: 5

Array.Clone()

Creates a shallow copy of the array.

csharp
int[] original = { 1, 2, 3, 4, 5 };
int[] cloned = (int[])original.Clone();

// Modifying the cloned array doesn't affect the original
cloned[0] = 99;

Console.WriteLine("Original array: " + string.Join(", ", original));
Console.WriteLine("Cloned array: " + string.Join(", ", cloned));

// Output:
// Original array: 1, 2, 3, 4, 5
// Cloned array: 99, 2, 3, 4, 5

Sorting and Searching Methods

Array.Sort()

Sorts the elements in an array in ascending order.

csharp
int[] numbers = { 4, 2, 7, 1, 5 };
Array.Sort(numbers);
Console.WriteLine("Sorted array: " + string.Join(", ", numbers));

// Output:
// Sorted array: 1, 2, 4, 5, 7

// For string arrays
string[] fruits = { "banana", "apple", "orange", "grape" };
Array.Sort(fruits);
Console.WriteLine("Sorted fruits: " + string.Join(", ", fruits));

// Output:
// Sorted fruits: apple, banana, grape, orange

Array.Reverse()

Reverses the order of elements in an array.

csharp
int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers);
Console.WriteLine("Reversed array: " + string.Join(", ", numbers));

// Output:
// Reversed array: 5, 4, 3, 2, 1

Array.IndexOf()

Searches for a specified element in an array and returns its index.

csharp
string[] pets = { "dog", "cat", "fish", "bird" };
int catIndex = Array.IndexOf(pets, "cat");
int rabbitIndex = Array.IndexOf(pets, "rabbit");

Console.WriteLine($"Index of 'cat': {catIndex}");
Console.WriteLine($"Index of 'rabbit': {rabbitIndex}");

// Output:
// Index of 'cat': 1
// Index of 'rabbit': -1 (not found)

Array.BinarySearch()

Searches a sorted array for a value using binary search algorithm.

csharp
int[] sortedNumbers = { 1, 3, 5, 7, 9, 11, 13 };
int index = Array.BinarySearch(sortedNumbers, 7);
int notFoundIndex = Array.BinarySearch(sortedNumbers, 8);

Console.WriteLine($"Index of 7: {index}");
Console.WriteLine($"Index of 8: {notFoundIndex}");

// Output:
// Index of 7: 3
// Index of 8: -5 (negative number indicates not found)
note

The array must be sorted before calling BinarySearch(), otherwise the results are unpredictable.

Array Transformation Methods

Array.Resize()

Resizes an array, preserving its contents.

csharp
int[] numbers = { 1, 2, 3 };
Console.WriteLine($"Original array: {string.Join(", ", numbers)}");

// Resize to a larger array
Array.Resize(ref numbers, 5);
Console.WriteLine($"After resize to 5: {string.Join(", ", numbers)}");

// Resize to a smaller array
Array.Resize(ref numbers, 2);
Console.WriteLine($"After resize to 2: {string.Join(", ", numbers)}");

// Output:
// Original array: 1, 2, 3
// After resize to 5: 1, 2, 3, 0, 0
// After resize to 2: 1, 2

Array.Copy()

Copies a range of elements from one array to another.

csharp
int[] source = { 1, 2, 3, 4, 5 };
int[] destination = new int[5];

// Copy all elements
Array.Copy(source, destination, source.Length);
Console.WriteLine("Full copy: " + string.Join(", ", destination));

// Copy partial elements (starting from index 2, copy 3 elements)
int[] partialDestination = new int[3];
Array.Copy(source, 2, partialDestination, 0, 3);
Console.WriteLine("Partial copy: " + string.Join(", ", partialDestination));

// Output:
// Full copy: 1, 2, 3, 4, 5
// Partial copy: 3, 4, 5

Testing and Checking Methods

Array.Exists()

Determines whether an array contains elements that match a condition.

csharp
int[] numbers = { 1, 2, 3, 4, 5 };

// Check if there's any even number
bool hasEven = Array.Exists(numbers, num => num % 2 == 0);
Console.WriteLine($"Array has even numbers: {hasEven}");

// Check if there's any number greater than 10
bool hasLarge = Array.Exists(numbers, num => num > 10);
Console.WriteLine($"Array has numbers > 10: {hasLarge}");

// Output:
// Array has even numbers: True
// Array has numbers > 10: False

Array.Find() and Array.FindLast()

Searches for an element that matches specific criteria.

csharp
int[] numbers = { 1, 3, 7, 8, 10, 12 };

// Find first even number
int firstEven = Array.Find(numbers, num => num % 2 == 0);
Console.WriteLine($"First even number: {firstEven}");

// Find last even number
int lastEven = Array.FindLast(numbers, num => num % 2 == 0);
Console.WriteLine($"Last even number: {lastEven}");

// Output:
// First even number: 8
// Last even number: 12

Array.FindAll()

Returns all elements that match specific criteria.

csharp
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Find all even numbers
int[] evenNumbers = Array.FindAll(numbers, num => num % 2 == 0);
Console.WriteLine($"All even numbers: {string.Join(", ", evenNumbers)}");

// Find all numbers greater than 5
int[] largeNumbers = Array.FindAll(numbers, num => num > 5);
Console.WriteLine($"All numbers > 5: {string.Join(", ", largeNumbers)}");

// Output:
// All even numbers: 2, 4, 6, 8, 10
// All numbers > 5: 6, 7, 8, 9, 10

Real-World Applications

Let's look at some practical examples that demonstrate how array methods are used in real-world scenarios.

Student Grade Analysis

csharp
// Example: Calculate statistics for student grades
int[] studentGrades = { 85, 92, 78, 95, 88, 76, 90, 85, 67, 99 };

// Sort the grades
Array.Sort(studentGrades);

// Find the lowest and highest grades
int lowestGrade = studentGrades[0];
int highestGrade = studentGrades[studentGrades.Length - 1];

// Calculate the average grade
double averageGrade = studentGrades.Average(); // Using LINQ

// Find all grades above 90 (A grade)
int[] aGrades = Array.FindAll(studentGrades, grade => grade >= 90);

Console.WriteLine($"Grades: {string.Join(", ", studentGrades)}");
Console.WriteLine($"Lowest grade: {lowestGrade}");
Console.WriteLine($"Highest grade: {highestGrade}");
Console.WriteLine($"Average grade: {averageGrade:F1}");
Console.WriteLine($"Number of A grades: {aGrades.Length}");
Console.WriteLine($"A grades: {string.Join(", ", aGrades)}");

// Output:
// Grades: 67, 76, 78, 85, 85, 88, 90, 92, 95, 99
// Lowest grade: 67
// Highest grade: 99
// Average grade: 85.5
// Number of A grades: 3
// A grades: 92, 95, 99

Product Inventory Management

csharp
// Define a product class
class Product
{
public string Name { get; set; }
public double Price { get; set; }
public int Quantity { get; set; }

public override string ToString()
{
return $"{Name} - ${Price:F2} ({Quantity} in stock)";
}
}

// Example: Managing a simple product inventory
Product[] inventory = new Product[]
{
new Product { Name = "Laptop", Price = 999.99, Quantity = 5 },
new Product { Name = "Mouse", Price = 25.50, Quantity = 15 },
new Product { Name = "Monitor", Price = 249.99, Quantity = 8 },
new Product { Name = "Keyboard", Price = 49.99, Quantity = 12 },
new Product { Name = "Headphones", Price = 79.99, Quantity = 10 }
};

// Find low-stock items (less than 10)
Product[] lowStockItems = Array.FindAll(inventory, p => p.Quantity < 10);
Console.WriteLine("Low stock items:");
foreach (var item in lowStockItems)
{
Console.WriteLine(item);
}

// Find the most expensive product
Array.Sort(inventory, (p1, p2) => p2.Price.CompareTo(p1.Price));
Console.WriteLine($"\nMost expensive product: {inventory[0]}");

// Output:
// Low stock items:
// Laptop - $999.99 (5 in stock)
// Monitor - $249.99 (8 in stock)
//
// Most expensive product: Laptop - $999.99 (5 in stock)

Summary

C# array methods provide powerful tools for working with arrays efficiently. We've covered:

  • Basic array properties and methods like Length and Clone()
  • Sorting and searching with Sort(), Reverse(), IndexOf(), and BinarySearch()
  • Transforming arrays with Resize() and Copy()
  • Testing and checking arrays with Exists(), Find(), FindLast(), and FindAll()

These methods significantly simplify array operations and eliminate the need to write custom code for common tasks. By leveraging the built-in array methods, you can write more concise, readable, and efficient code.

Additional Exercises

To strengthen your understanding of array methods, try these exercises:

  1. Create a program that reads 10 integers from the user, stores them in an array, and then:

    • Sorts them in ascending order
    • Finds the smallest and largest values
    • Calculates the average
    • Counts how many even and odd numbers are in the array
  2. Create a simple contact management system that:

    • Stores contacts (name, email, phone) in an array
    • Allows searching for contacts by name
    • Sorts contacts alphabetically by name
    • Filters contacts based on certain criteria (e.g., contacts with gmail addresses)
  3. Create a program that uses Array.Resize() to implement a dynamic array that grows as new elements are added.

Further Resources

Remember that mastering array methods is an important step toward becoming proficient in C# programming. These methods serve as building blocks for more complex operations and algorithms you'll encounter as you progress in your programming journey.



If you spot any mistakes on this website, please let me know at [email protected]. I’d greatly appreciate your feedback! :)