Как получить ключ по значению?
С клавиатуры вводится число от 1 до 10 и нужно по нему от вывести информацию о рандомно созданном человеке (имя, фамилия, дата рождения). И у меня возникла заминка: я не знаю как получить ключ по значению.
using System;
using System.Collections.Generic;
using System.Linq;
namespace people
{
class Human {
string[] names = new string[] {"Egor", "Roman", "Vladimir", "Alexander", "Ivan", "Artyom", "Yaroslav", "Mikhail", "Arthur", "Nekita"};
string[] secondNames = new string[] {"Vorobiev", "Strigin", "Bairamov", "Ivanov", "Petrov", "Sokolov", "Smirnov", "Popov", "Morozov", "Volkov"};
int[] dates = new int[] {200304, 210505, 040595, 050606, 070809, 010203, 170209, 060990, 150809, 120584};
string _name;
string _secondName;
int _date;
Random r = new Random();
public Human()
{
_name = names[r.Next(0, names.Length)];
_secondName = secondNames[r.Next(0, secondNames.Length)];
_date = dates[r.Next(0, dates.Length)];
}
public string GetName()
{
return _name;
}
public string GetSecondName()
{
return _secondName;
}
public int GetDate()
{
return _date;
}
}
class Program
{
static void Main(string[] args)
{
Human h1 = new Human();
Human h2 = new Human();
Human h3 = new Human();
Human h4 = new Human();
Human h5 = new Human();
Human h6 = new Human();
Human h7 = new Human();
Human h8 = new Human();
Human h9 = new Human();
Human h10 = new Human();
Dictionary<Human, int> people = new Dictionary <Human, int>
{
{h1, 1},
{h2, 2},
{h3, 3},
{h4, 4},
{h5, 5},
{h6, 6},
{h7, 7},
{h8, 8},
{h9, 9},
{h10, 10}
};
Console.Write("Введите число от 1 до 10: ");
int a = Convert.ToInt32(Console.ReadLine());
foreach (var item in people.Values)
{
if (item == a)
{
//конкретно здесь я не знаю что делать
}
}
}
}
}
Ответы (3 шт):
Автор решения: Igor
→ Ссылка
foreach (var key in people.Keys)
{
if (people[key] == a)
{
//конкретно здесь я знаю что делать
}
}
Автор решения: VladD
→ Ссылка
Вам вовсе не нужно получать значение по ключу. Если вам внутри цикла нужно и ключ, и значение, пишите так:
foreach (var (key, item) in people)
{
// тут у вас есть и ключ, и значение
}
Но для вашего случая даже это не нужно. Раз вам нужно получить человека п очислу, значит, в вашем словаре число должно быть ключом. Получаем вот что:
Dictionary<int, Human> people = new Dictionary <int, Human>
{
{1, h1},
{2, h2},
{3, h3},
{4, h4},
{5, h5},
{6, h6},
{7, h7},
{8, h8},
{9, h9},
{10, h10},
};
Console.Write("Введите число от 1 до 10: ");
int a = Convert.ToInt32(Console.ReadLine());
var item = people[a];
Автор решения: Qwertiy
→ Ссылка
Ключи и значения в словаре надо поменять местами:
var people = new Dictionary <int, Human>
{
{1, h1},
{2, h2},
Ну и потом
Console.Write("Введите число от 1 до 10: ");
int i = int.Parse(Console.ReadLine());
var h = p[i];
PS: А это - косяк:
Random r = new Random();