Мое консольное приложение будет проходить через каждого пользователя, чтобы получить их веб-сайты, чтобы он мог снимать с них новые скриншоты. Тем не менее, чтобы предотвратить одновременный скриншот одного и того же веб-сайта, я должен проверить, был ли уже снят скриншот веб-сайта, и прокручивается через другие сайты пользователей.Проверить наличие дубликатов для детей
Мое текущее решение:
База данных:
User
|--> ID: 1
|--> FirstName: Joe
|--> ID: 2
|--> FirstName: Stranger
Websites
|--> ID: 1
|--> UserID: 1
|--> URL: http://site.com
|--> ID: 2
|--> UserID: 2
|--> URL: http://site.com
консоли приложение:
static void RenewWebsiteThumbNails()
{
Console.WriteLine("Starting renewal process...");
using (_repository)
{
var websitesUpdated = new List<string>();
foreach (var user in _repository.GetAll())
{
foreach (var website in user.Websites.Where(website => !websitesUpdated.Contains(website.URL)))
{
_repository.TakeScreenDumpAndSave(website.URL);
websitesUpdated.Add(website.URL);
Console.WriteLine(new string('-', 50));
Console.WriteLine("{0} has successfully been renewed", website.URL);
}
}
}
}
Тем не менее, кажется неправильным, чтобы объявить список для такого сценария, просто чтобы проверить, является ли добавлен конкретный URL-адрес ... любые предложения для альтернативного способа?
@Jenea - Не могли бы вы объяснить, как 'новый Hash()' будет O (1) в то время как 'новый список ()' будет O (п) - и какой он отличается? –
ebb
@ebb - Чтобы найти элемент, содержащийся в списке, необходимо перебрать весь список. –
@Jenea - Не было бы 'HashSet' делать то же самое, когда я делаю' if (! WebsitesUpdated.Contains (website.URL)) {..} '? – ebb