How to create a hash from two equal-length arrays (keys and values) in C#

1 Answer

0 votes
using System;
using System.Collections.Generic;

// ------------------------------------------------------------
// Class representing a key/value pair
// ------------------------------------------------------------
public class Pair
{
    public string Key { get; set; }
    public int Value { get; set; }

    public Pair(string key, int value) {
        Key = key;
        Value = value;
    }
}

class Program
{
    // ------------------------------------------------------------
    // Build a List<Pair> (preserves original order)
    // ------------------------------------------------------------
    static List<Pair> MakePairList(string[] keys, int[] values) {
        var result = new List<Pair>();

        for (int i = 0; i < keys.Length; i++){
            result.Add(new Pair(keys[i], values[i]));
        }

        return result;
    }

    // ------------------------------------------------------------
    // Build a sorted List<Pair> (sorted by key)
    // ------------------------------------------------------------
    static List<Pair> MakeSortedPairs(string[] keys, int[] values) {
        var list = MakePairList(keys, values);

        list.Sort((a, b) => string.Compare(a.Key, b.Key, StringComparison.Ordinal));

        return list;
    }

    // ------------------------------------------------------------
    // Print parallel arrays
    // ------------------------------------------------------------
    static void PrintParallelArrays(string[] keys, int[] values) {
        for (int i = 0; i < keys.Length; i++) {
            Console.WriteLine($"  {keys[i]} => {values[i]}");
        }
    }

    // ------------------------------------------------------------
    // Print List<Pair>
    // ------------------------------------------------------------
    static void PrintPairs(List<Pair> list) {
        foreach (var p in list) {
            Console.WriteLine($"  {p.Key} => {p.Value}");
        }
    }

    // ------------------------------------------------------------
    // Main program demonstrating all three
    // ------------------------------------------------------------
    static void Main()
    {
        string[] keys = { "a", "b", "c" };
        int[] values = { 1, 2, 3 };

        var ordered = MakePairList(keys, values);
        var sorted = MakeSortedPairs(keys, values);

        Console.WriteLine("Parallel arrays:");
        PrintParallelArrays(keys, values);

        Console.WriteLine();
        Console.WriteLine("List<Pair> (preserves order):");
        PrintPairs(ordered);

        Console.WriteLine();
        Console.WriteLine("Sorted List<Pair> (sorted by key):");
        PrintPairs(sorted);
    }
}


/*
run:

Parallel arrays:
  a => 1
  b => 2
  c => 3

List<Pair> (preserves order):
  a => 1
  b => 2
  c => 3

Sorted List<Pair> (sorted by key):
  a => 1
  b => 2
  c => 3
  
*/

 



answered 2 hours ago by avibootz
...