Я думаю, что выбранный ответ корректен и довольно сладок. Я реализовал его по-другому, хотя, поскольку я также хотел результат в произвольном порядке.
static IEnumerable<SomeType> PickSomeInRandomOrder<SomeType>(
IEnumerable<SomeType> someTypes,
int maxCount)
{
Random random = new Random(DateTime.Now.Millisecond);
Dictionary<double, SomeType> randomSortTable = new Dictionary<double,SomeType>();
foreach(SomeType someType in someTypes)
randomSortTable[random.NextDouble()] = someType;
return randomSortTable.OrderBy(KVP => KVP.Key).Take(maxCount).Select(KVP => KVP.Value);
}
Существует MMC Snap-In Framework для Delphi 7 , автор Колин Уилсон . Поставляется с пакетами для установки и полным исходным кодом. Возможно, стоит взглянуть.
Править : Как отмечает Марко, на сайте Колина есть раздел Delphi 2009. Эта ссылка представляет собой загрузку версии его компонентов 2009 г., которая содержит обновленную структуру MMC Snap-In Framework.