В общем, надо добавить факультеты в словарь Dictionary <string,Person> faculty, ключ-строка, значение-человек(студент или преподаватель).
Для выбора названий факультета есть массив строк faculties, откуда в цикле for добавляется рандомно выбранный элемент из faculties в качестве ключа.
Беда в том, что добавив несколько элементов происходит зацикливание. Ну допустим, он выбирает элемент "ФЭМБИ", добавляет его, потом добавляет следующий, но в итоге у программы не остается выбора кроме как добавить уже добавленный ключ, он опять выбирает "ФЭМБИ", происходит эксепшн, там происходит откат на шаг назад, он снова пытается добавить "ФЭМБИ", снова уходит в эксепшн......
Понятно, что чем больше названий факультетов для выбора, тем меньше вероятности, что произойдет зацикливание, но хотелось бы как то заставить программу пахать с небольшим количеством вариантов для выбора) Можно как-то "обмануть" словарь чтобы он добавлял уже добавленные ключи?
using laba10;
using System;
using System.Collections.Generic;
using System.Linq;
namespace laba14
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, Person> faculty = new Dictionary<string, Person>();
List<Dictionary<string, Person>> university = new List<Dictionary<string, Person>>();
Random rand = new Random();
string[] faculties = {"ФЭМБИ", "ФГиГИТ", "МИЭФ", "МИРЭК", "ФДП"};
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nДобавление элементов в коллекцию:");
Console.ResetColor();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nВведите количество элементов для добавления:\n");
Console.ResetColor();
int size;
bool ok = int.TryParse(Console.ReadLine(), out size);
for (int i = 0; i < size; i++)
{
try
{
//чтобы половина была студентов, половина преподавателей
if (i % 2 == 0)
{
faculty.Add(faculties[rand.Next(faculties.Length)], new Student());
}
else
{
faculty.Add(faculties[rand.Next(faculties.Length)], new Teacher());
}
}
catch (Exception)
{
i--;
}
}
foreach (var v in faculty.Keys)
{
Console.WriteLine($"{v} | {faculty[v]}");
}
}
}
}
Вот в этой строчке добавление чтобы не искать в коде:
faculty.Add(faculties[rand.Next(faculties.Length)], new Student());
В общем я просто поменяла ключ-значение местами, теперь на месте ключа объект Person (имя+фамилия+возраст), поэтому уникальность повышается в разы, 100,000 элементов из 36 фамилий+36 имен+ возраста в диапазоне от 18 до 80 формирует. Изменились строчки:
Dictionary< Person,string> faculty = new Dictionary< Person,string>();
List<Dictionary< Person,string>> university = new List<Dictionary< Person,string>>();
//чтобы половина была студентов, половина преподавателей
if (i % 2 == 0)
{
faculty.Add(new Student(),faculties[rand.Next(faculties.Length)]);
}
else
{
faculty.Add(new Teacher(), faculties[rand.Next(faculties.Length)]);
}
Все, отмена, я сделала ситуацию еще страшнее. Добавила класс отдельно для факультета, теперь все пашет как надо (до поры до времени)
public class Faculty
{
string Name { get; set; }
Random rand = new Random();
string[] faculties = { "ФЭМБИ", "ФГиГИТ", "МИЭФ", "МИРЭК", "ФДП", "ИСФ", "СГФ", "ТЭФ", "ФАИД", "ФАД", "ФКФН", "ЮФ", "ЗФ", "МИЭМ", "ФПЭ", "ИКТ", "ПМИ" };
public Faculty()
{
Name = faculties[rand.Next(faculties.Length)];
}
public Faculty(string name)
{
Name = name;
}
public override string ToString()
{
return $"{Name}";
}
}
class Program
{
static void Main(string[] args)
{
Dictionary<Faculty,Person> faculty = new Dictionary<Faculty, Person>();
List<Dictionary<Faculty, Person>> university =
new List<Dictionary<Faculty, Person>>();
Random rand = new Random();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nДобавление элементов в коллекцию:");
Console.ResetColor();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nВведите количество элементов для добавления:\n");
Console.ResetColor();
int size;
bool ok = int.TryParse(Console.ReadLine(), out size);
for (int i = 0; i < size; i++)
{
try
{
//чтобы половина была студентов, половина преподавателей
if (i % 2 == 0)
{
faculty.Add(new Faculty(), new Student());
}
else
{
faculty.Add(new Faculty(), new Teacher());
}
}
catch (Exception)
{
i--;
}
}
foreach (var v in faculty.Keys)
{
Console.WriteLine($"{v} | {faculty[v]}");
}
}
super()__init__() является аналогом base: в c#?
В своём проекте я использую изображения большого разрешения, из-за чего методы getpixel/setpixel работают очень медленно, то-есть програма лагает,...