Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Биективный словарь

17.01.2013, 21:42. Показов 1197. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возник простой вопрос: существуют ли такие структуры данных встроенные, а если нет. как можно максимально просто (и с достаточны быстродействием, без быдлокода) определить биективный словарь, то есть словарь, для которого
dict[key] == value => dict[value] == key ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.01.2013, 21:42
Ответы с готовыми решениями:

Словарь на C#
Всем привет. Подскажите пожалуйста, где можно найти и в каком лучше формате искать готовый словарь, чтобы потом использовать его в...

Словарь
В общем, нужна помощь со словарями, ибо я не совсем вижу у себя ошибку (хотя может быть я просто неправильно словари использую). Есть 3...

Не получается вложить словарь в словарь
Друзья, доброго времени суток! Не могу понять, почему у меня не получается вложить словарь в словарь. Set Header =...

10
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
17.01.2013, 22:01
Думаю, можно наследовать от Dictionary<T> и в операциях добавления добавить код, автоматически добавляющий вот этот самый биективный элемент с предварительной валидацией, конечно. Соответственно для удаления. Насчет встроенных, думаю не найдется в .NET. А с какой целью такие вообще используются?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 22:06  [ТС]
IamRain, ну например, для определения обратных функций и операторов. Насчет наследовать и добавлять пары элементов: это конечно простое решение, но оно, как я уже сказал, "быдлокодерское", потому что количество элементов удваивается, а толку от этого - чуть
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
17.01.2013, 22:10
мм, ну да, в принципе мог бы и сам догадаться. А насчет реализации : по-моему, это наиболее простой путь. Во всяком случае, всегда можно попробовать, а там уже смотреть - апгрейдить или изменять.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 22:13  [ТС]
IamRain, ну в принципе да, простота реализации >> быстродействия, потому что понятный код оптимизировать можно легко, а вот быстрый код разобрать - затруднительно

Но интересны варианты, кроме: велосипедить свой класс, наследуя от IDictionary, добавлять пары элементов
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
17.01.2013, 22:15
Psilon, а если в индексаторе какой-нить конвертер ручной написать?

Что б возвращало как раз то что нужно,key<->value
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 22:29  [ТС]
Noob.net, хм, вроде неплохой вариант, но как написать индексатор, у которого параметр - строка, я не представляю

Добавлено через 9 минут
Вот череззадничная реализация, интересно, как лучше можно сделать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
 
namespace DictTest
{
    class BijectiveDictionary<T> : Dictionary<T,T>
    {
        public new void Add(T x, T y)
        {
            base.Add(x,y);
            base.Add(y,x);
        }
 
        public new void Remove(T x)
        {
            base.Remove(this[x]);
            base.Remove(x);
        }
    }
 
    class Program
    {
        static void Main()
        {
            var dict = new BijectiveDictionary<char>();
            dict.Add('+','-');
            Console.WriteLine("Inverse of {0} is {1}", '+' ,dict['+']);
            Console.WriteLine("Inverse of {0} is {1}", '-', dict['-']);
            Console.ReadKey();
 
        }
    }
}
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
17.01.2013, 22:36
Psilon, Так индексатор от IDictionary принимает объект и его же возвращает.
Я имел ввиду,что б он возвращал противоположное значение от данного.
То-есть,получил ключ - вернул значение,значение - вернул ключ.
C#
1
2
object IDictionary.this[object key] 
//дальше на get обычным ифом обойтись или чем-то вроде конвертера.
p.s.Если я правильно понял - биективный,такой который возвращает противоположное значение,
что-то типа словаря с обратной привязкой ключа к значению.

Добавлено через 4 минуты
Вот что нашел
C#
1
types.FirstOrDefault(x => x.Value == "one");
Поправь если не понял.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 22:42  [ТС]
В принципе есть такой вариант, но он тоже не очень нравится:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Linq;
using System.Collections.Generic;
 
namespace DictTest
{
    class BijectiveDictionary<T> : Dictionary<T,T>
    {
        public new T this[T index]
        {
            get
            {
                if (ContainsKey(index))
                    return base[index];
                if (ContainsValue(index))
                    return this.FirstOrDefault(x => index.Equals(x.Value)).Key;
                throw new KeyNotFoundException("index");
            }
        }
    }
 
    class Program
    {
        static void Main()
        {
            var dict = new BijectiveDictionary<char>();
            dict.Add('+','-');
            Console.WriteLine("Inverse of {0} is {1}", '+' ,dict['+']);
            Console.WriteLine("Inverse of {0} is {1}", '-', dict['-']);
            dict.Remove('+');
            Console.ReadKey();
 
        }
    }
}
Вот что нашел

C#
1
types.FirstOrDefault(x => x.Value == "one");
Поправь если не понял.
Чорд, ты нашел, а я сам велосипедил
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
17.01.2013, 22:47
Цитата Сообщение от Psilon Посмотреть сообщение
Чорд, ты нашел,
Идешь теперь на темную сторону?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 22:50  [ТС]
Noob.net,

Не по теме:

не, человек, воспитанный kb2, MoO и Might & Magic не может просто так взять, и перейти на темную сторону



Спрошу на англоязычном MSDN, может там чего подскажут. А то в одном случае получается дублирование данных, а в другом много циклов, замедляется доступ (в случае поиска по значению, по ключу получается практически та же скорость, только лишняя проверка).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2013, 22:50
Помогаю со студенческими работами здесь

Словарь
Нужно создать страницу, ~словарь. Простая таблица 5 текстовых полей с описанием + 2 индекса(1 собственный и 1 таблицы поставщиков). ...

Словарь
Нужна ссылка на русско-английский словарь (тот который можно распарсить). Или что-то из чего можно сделать массив слово - перевод.

Словарь
Мой файл данных (dict.txt) имеет вид &quot;en_word=ru_word&quot;, т.е. в каждой строке содержится английское слово и его перевод. вот мой код: ...

Словарь
Всем доброе суток! пишу прогу словарь все сделал кроме такого алгоритма! вот например если написать Агурец чтоб он вывел возможно вы...

Словарь
Доброго времени суток.Небольшой вопрос.Нужно в делфи написать словарь. Что бы выводился список слов на каждую букву,и при нажатие на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru