Если вы хотите неизменную коллекцию (вы не собираетесь добавлять ее в коллекцию после создания коллекции), используйте поиск. Если вам нужно иметь возможность добавлять / удалять записи, используйте словарь. Я включил пример использования IGrouping, но это самый медленный поиск, так как вам нужно выполнять итерацию до тех пор, пока вы не найдете ключ, но очень эффективный, если вам нужно итерировать все ключи так, как вы хотите получить случайную строку для каждого key.
Вот пример использования Lookup:
var values = new[] {
new KeyValuePair<string,string> ("AAAA","ACFE"),
new KeyValuePair<string,string> ("AAAA","AAFE"),
new KeyValuePair<string,string> ("AAAA","CAED"),
new KeyValuePair<string,string> ("AAAA","HSGB"),
new KeyValuePair<string,string> ("AAGB","ZZZZ"),
new KeyValuePair<string,string> ("AAGB","XXXX"),
new KeyValuePair<string,string> ("AAGB","CAED"),
new KeyValuePair<string,string> ("AAGB","HSGB"),
new KeyValuePair<string,string> ("ABDA","YYYY"),
new KeyValuePair<string,string> ("ABDA","WWWW"),
new KeyValuePair<string,string> ("ABDA","CAED"),
new KeyValuePair<string,string> ("ABDA","HSGB"),
};
// Convert array to a Lookup
var lookup=values.ToLookup(k=>k.Key, v=>v.Value);
// Retrieve random string from entry "AAAA"
var entry = lookup["AAAA"];
var rand = new Random();
var max = entry.Count();
var ans = entry.Skip(rand.Next(max)).First();
Вот пример использования Dictionary<string,List<string>>
:
var values = new[] {
new KeyValuePair<string,string> ("AAAA","ACFE"),
new KeyValuePair<string,string> ("AAAA","AAFE"),
new KeyValuePair<string,string> ("AAAA","CAED"),
new KeyValuePair<string,string> ("AAAA","HSGB"),
new KeyValuePair<string,string> ("AAGB","ZZZZ"),
new KeyValuePair<string,string> ("AAGB","XXXX"),
new KeyValuePair<string,string> ("AAGB","CAED"),
new KeyValuePair<string,string> ("AAGB","HSGB"),
new KeyValuePair<string,string> ("ABDA","YYYY"),
new KeyValuePair<string,string> ("ABDA","WWWW"),
new KeyValuePair<string,string> ("ABDA","CAED"),
new KeyValuePair<string,string> ("ABDA","HSGB"),
};
//Convert array to Dictionary<string,List<String>>
var dict = values.GroupBy(k=>k.Key)
.ToDictionary(k=>k.Key,v=>v.Select(kvp=>kvp.Value).ToList());
// Retrieve random string from entry "AAAA"
var entry = lookup["AAAA"];
var rand = new Random();
var max = entry.Count();
var ans = entry.Skip(rand.Next(max)).First();
Вот пример использования IGrouping:
var values = new[] {
new KeyValuePair<string,string> ("AAAA","ACFE"),
new KeyValuePair<string,string> ("AAAA","AAFE"),
new KeyValuePair<string,string> ("AAAA","CAED"),
new KeyValuePair<string,string> ("AAAA","HSGB"),
new KeyValuePair<string,string> ("AAGB","ZZZZ"),
new KeyValuePair<string,string> ("AAGB","XXXX"),
new KeyValuePair<string,string> ("AAGB","CAED"),
new KeyValuePair<string,string> ("AAGB","HSGB"),
new KeyValuePair<string,string> ("ABDA","YYYY"),
new KeyValuePair<string,string> ("ABDA","WWWW"),
new KeyValuePair<string,string> ("ABDA","CAED"),
new KeyValuePair<string,string> ("ABDA","HSGB"),
};
//Convert array to IGrouping<string,string>
var group = values.GroupBy(k=>k.Key);
// Retrieve random string from entry "AAAA"
var entry = group.First(k=>k.Key == "AAAA");
var rand = new Random();
var max = entry.Count();
var ans = entry.Skip(rand.Next(max)).First().Value;