using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _04_MyHashTable
{
class CustomHashTableTest
{
static void Main(string[] args)
{
CustomHashTable<string, int> hashTable = new CustomHashTable<string, int>(4);
hashTable.Add("a", 5);
hashTable.Add("bb", 6);
hashTable.Add("ccc", 7);
hashTable.Add("d", 8);
hashTable.Add("ee", 9);
hashTable.Add("fff", 10);
hashTable.Add("g", 11);
hashTable.Add("hh", 12);
hashTable.Add("iii", 13);
hashTable.Add("j", 14);
hashTable.Remove("j");
string searchedKey = "bb";
Console.WriteLine("Value of {0} is {1}.", searchedKey, hashTable.Find(searchedKey));
foreach (KeyValuePair<string,int> pair in hashTable)
{
Console.WriteLine("Key -> {0}, Value -> {1}", pair.Key, pair.Value);
}
string indexKey = "g";
Console.WriteLine("Indexator: element[{0}] = {1}", indexKey, hashTable[indexKey]);
hashTable["g"] = 444;
Console.WriteLine("Indexator: element[{0}](after change) = {1}", indexKey, hashTable[indexKey]);
List<string> allKeys = hashTable.Keys;
Console.Write("The keys are: ");
foreach (string key in allKeys)
{
Console.Write("{0},", key);
}
Console.WriteLine(".");
hashTable.Clear();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKbmFtZXNwYWNlIF8wNF9NeUhhc2hUYWJsZQp7CiAgICBjbGFzcyBDdXN0b21IYXNoVGFibGVUZXN0CiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgQ3VzdG9tSGFzaFRhYmxlPHN0cmluZywgaW50PiBoYXNoVGFibGUgPSBuZXcgQ3VzdG9tSGFzaFRhYmxlPHN0cmluZywgaW50Pig0KTsKICAgICAgICAgICAgaGFzaFRhYmxlLkFkZCgiYSIsIDUpOwogICAgICAgICAgICBoYXNoVGFibGUuQWRkKCJiYiIsIDYpOwogICAgICAgICAgICBoYXNoVGFibGUuQWRkKCJjY2MiLCA3KTsKICAgICAgICAgICAgaGFzaFRhYmxlLkFkZCgiZCIsIDgpOwogICAgICAgICAgICBoYXNoVGFibGUuQWRkKCJlZSIsIDkpOwogICAgICAgICAgICBoYXNoVGFibGUuQWRkKCJmZmYiLCAxMCk7CiAgICAgICAgICAgIGhhc2hUYWJsZS5BZGQoImciLCAxMSk7CiAgICAgICAgICAgIGhhc2hUYWJsZS5BZGQoImhoIiwgMTIpOwogICAgICAgICAgICBoYXNoVGFibGUuQWRkKCJpaWkiLCAxMyk7CiAgICAgICAgICAgIGhhc2hUYWJsZS5BZGQoImoiLCAxNCk7CiAgICAgICAgICAgIGhhc2hUYWJsZS5SZW1vdmUoImoiKTsKICAgICAgICAgICAgc3RyaW5nIHNlYXJjaGVkS2V5ID0gImJiIjsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlZhbHVlIG9mIHswfSBpcyB7MX0uIiwgc2VhcmNoZWRLZXksIGhhc2hUYWJsZS5GaW5kKHNlYXJjaGVkS2V5KSk7CiAgICAgICAgICAgIGZvcmVhY2ggKEtleVZhbHVlUGFpcjxzdHJpbmcsaW50PiBwYWlyIGluIGhhc2hUYWJsZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIktleSAtPiB7MH0sIFZhbHVlIC0+IHsxfSIsIHBhaXIuS2V5LCBwYWlyLlZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJpbmcgaW5kZXhLZXkgPSAiZyI7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJJbmRleGF0b3I6IGVsZW1lbnRbezB9XSA9IHsxfSIsIGluZGV4S2V5LCBoYXNoVGFibGVbaW5kZXhLZXldKTsKICAgICAgICAgICAgaGFzaFRhYmxlWyJnIl0gPSA0NDQ7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJJbmRleGF0b3I6IGVsZW1lbnRbezB9XShhZnRlciBjaGFuZ2UpID0gezF9IiwgaW5kZXhLZXksIGhhc2hUYWJsZVtpbmRleEtleV0pOwogICAgICAgICAgICBMaXN0PHN0cmluZz4gYWxsS2V5cyA9IGhhc2hUYWJsZS5LZXlzOwogICAgICAgICAgICBDb25zb2xlLldyaXRlKCJUaGUga2V5cyBhcmU6ICIpOwogICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcga2V5IGluIGFsbEtleXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoInswfSwiLCBrZXkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIuIik7CiAgICAgICAgICAgIGhhc2hUYWJsZS5DbGVhcigpOwogICAgICAgIH0KICAgIH0KfQo=