Генерация уникальных дат

barkasian

Client
Регистрация
03.12.2014
Сообщения
127
Благодарностей
137
Баллы
43
Приветствую!
Прошу помощи в след. коде:

PHP:
//Объявляем list для хранения дат
var listData = new List<DateTime>();

//Дата сегодня
DateTime dateNow = DateTime.Now;

Random rndRowIndex = new Random();
int intCurrentIndex = rndRowIndex.Next(0, 7);

//Формируем list в цикле со генерированными датами
for(int i = 0; i < 10; i++)
{
   int mint = intCurrentIndex * 2;
   int sec = intCurrentIndex * 3 + 1;
   listData.Add(dateNow.AddHours(-intCurrentIndex).AddMinutes(-mint).AddSeconds(-sec));
   intCurrentIndex = rndRowIndex.Next(intCurrentIndex, intCurrentIndex * 2 + 1); 
}

//Сортировка дат на возрастание
listData.Sort((a, b) => a.CompareTo(b));

//Проверка. Вывод в log
for(int i = 0; i < listData.Count; i++)
{
   project.SendInfoToLog(String.Format("Время {0}", listData[i])); 
}
Сниппет генерирует произвольные даты с последующей сортировкой на убывание.
Периодически, если смотреть потом лог, в list попадают одинаковые даты (вплоть до секунд).
Подскажите, плиз, как подкорректировать код в цикле, чтобы всегда даты были уникальны?
 

barkasian

Client
Регистрация
03.12.2014
Сообщения
127
Благодарностей
137
Баллы
43
UPD:
Проблема в том, что когда intCurrentIndex принимает значение 0, то в строке
Код:
intCurrentIndex = rndRowIndex.Next(intCurrentIndex, intCurrentIndex * 2 + 1);
он не меняет своего значения. Поэтому идут одинаковые даты.
Попробуем:

Код:
while (listData.Count < 10)
{
    int mint = intCurrentIndex * 2;
    int sec = intCurrentIndex * 3 + 1;
    DateTime dt = dateNow.AddHours(-intCurrentIndex).AddMinutes(-mint).AddSeconds(-sec);
    if (!listData.Contains(dt)) listData.Add(dt);
    intCurrentIndex = rndRowIndex.Next(intCurrentIndex, intCurrentIndex * 2 + 3);
}
пруф.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)