Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / HashSet для .NET2.0 / 25 сообщений из 28, страница 1 из 2
30.09.2013, 18:28
    #38412216
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Ну собственно и такой вопрос.
Мне надо иметь некую генерик коллекцию с уникальными значениями.
Стандартного класса вроде нет, гугл пока не помог.
Может ктото знает чтото такое, сорцы класса ?
Спасибо
...
Рейтинг: 0 / 0
30.09.2013, 18:29
    #38412220
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Могу впринципе внутрь завернуть Dictionary<Tkey, object>
Но думаю не самое красивое решение
...
Рейтинг: 0 / 0
30.09.2013, 18:35
    #38412233
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
tual,

Iesi.Collections из NHibernate.
...
Рейтинг: 0 / 0
30.09.2013, 18:36
    #38412237
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
незя.
Это у меня проект dll к которой ничего нельзя стороннего подключать.
...
Рейтинг: 0 / 0
30.09.2013, 19:21
    #38412282
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Да и вообще мне просто лист с уникальными значениями надо
так что наверно словарь как вариант и приватное поле подойдет
...
Рейтинг: 0 / 0
30.09.2013, 19:42
    #38412295
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
tual,
это не я писал Set<T>, а Рихтер, по этому прошу отнестись с пониманием..
...
Рейтинг: 0 / 0
30.09.2013, 19:59
    #38412309
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Спасибо
...
Рейтинг: 0 / 0
30.09.2013, 22:53
    #38412406
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
tualМогу впринципе внутрь завернуть Dictionary<Tkey, object>
Но думаю не самое красивое решение
Чем оно не красивое?
...
Рейтинг: 0 / 0
30.09.2013, 23:09
    #38412424
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУЧем оно не красивое?
у словаря наверное 2 проблемы

жрёт много
нельзя вставить 2,3 экземпляра на один ключ.
ну и в диапазоне нельзя искать )))

а то был бы просто индексированный столбец
...
Рейтинг: 0 / 0
30.09.2013, 23:37
    #38412440
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
beg-in-erнельзя вставить 2,3 экземпляра на один ключ.
ну и в диапазоне нельзя искать )))


топикстартер этого не заказывал
...
Рейтинг: 0 / 0
01.10.2013, 00:20
    #38412454
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУ,
Вообще то да, словаря вполне предостаточно, если некрасиво выглядит сам словарь, можно от него наследоваться
Код: c#
1.
2.
3.
4.
5.
6.
7.
 public class Set1<T> : Dictionary<T, T>
    {
        public new void Add(T item)
        {
            if (!this.ContainsKey(item)) base.Add(item,item);
        }
    }


или еще финт
Код: c#
1.
2.
3.
4.
5.
6.
7.
 public  class Set<T> : KeyedCollection<T, T>
    {
        public Set() { }
        public Set(IEqualityComparer<T> comparer) : base(comparer) { }
        protected override T GetKeyForItem(T v) { return v; }
 
    }
...
Рейтинг: 0 / 0
01.10.2013, 00:31
    #38412456
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
...
Рейтинг: 0 / 0
01.10.2013, 00:40
    #38412460
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
petalvik,
вообще то да , но 14903327
а тут 14903578 донором и является PowerCollections , да простит меня Р.
...
Рейтинг: 0 / 0
01.10.2013, 10:07
    #38412614
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
beg-in-erжрёт много
О каком жоре идет речь?

beg-in-erнельзя вставить 2,3 экземпляра на один ключ.
На то он и IDictionary, чтобы не допускать этого.

beg-in-erну и в диапазоне нельзя искать )))
LINQ

beg-in-erа то был бы просто индексированный столбец
И что ты с ним делал бы?
...
Рейтинг: 0 / 0
01.10.2013, 10:08
    #38412617
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Где-то в степиесли некрасиво выглядит сам словарь ...
Что есть "красота" словаря? :)
...
Рейтинг: 0 / 0
01.10.2013, 11:04
    #38412710
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУ,
ага добавление, Add, ну что красивого?
или в енумераторе финты разные выдумывать.
Это типа тут не играйте тут рыбу заворачивали ))
...
Рейтинг: 0 / 0
01.10.2013, 11:44
    #38412786
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Где-то в степиМСУ,
ага добавление, Add, ну что красивого?
или в енумераторе финты разные выдумывать.
Это типа тут не играйте тут рыбу заворачивали ))
А что ужасного в Add? Ты меня пугаешь :)

Код: c#
1.
2.
var dict = new Dictionary<int, string>();
Enumerable.Range(1, 100).ToList().ForEach(item => dict.Add(item, "так ли страшно?" + item));
...
Рейтинг: 0 / 0
01.10.2013, 12:01
    #38412818
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУГде-то в степиМСУ,
ага добавление, Add, ну что красивого?
или в енумераторе финты разные выдумывать.
Это типа тут не играйте тут рыбу заворачивали ))
А что ужасного в Add? Ты меня пугаешь :)

Код: c#
1.
2.
var dict = new Dictionary<int, string>();
Enumerable.Range(1, 100).ToList().ForEach(item => dict.Add(item, "так ли страшно?" + item));


Код: c#
1.
var d = Enumerable.Range(1, 100).ToDictionary(v => i, v => "i = " + i.ToString());
...
Рейтинг: 0 / 0
01.10.2013, 12:02
    #38412823
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУbeg-in-erнельзя вставить 2,3 экземпляра на один ключ.
На то он и IDictionary, чтобы не допускать этого.++

HashSet этого тоже не позволяет.
...
Рейтинг: 0 / 0
01.10.2013, 12:30
    #38412861
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУ,
да я не пугаю..
автор если некрасиво выглядит сам словарь
имхо красота это субъективное понятие ( в контексте этого вопроса), я и сам в некоторых местах согласен- все полезно что в рот полезло, ну не нравится та оборачивать словарь? ну или пользоваться им в открытом виде - ну не нравится - его право.
ну не хочет он сторонних dll, тоже право. Bот и исходили в ответах из его желаний.Мне вот тоже не нравится, ну не нравится и все.
Мне нравится как у Васи Ложкина - все красиво и понятно, без всяких подводных течений как у Чехова в "Вишнёвом саде"
А если еще обфускатором потоптаться по коду , тогда вообще вопросы исчезнут ))
...
Рейтинг: 0 / 0
01.10.2013, 13:05
    #38412952
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Алексей К
Код: c#
1.
var d = Enumerable.Range(1, 100).ToDictionary(v => i, v => "i = " + i.ToString());


Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer<i>' because it is not a delegate type.
...
Рейтинг: 0 / 0
01.10.2013, 13:06
    #38412956
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
Где-то в степи, хоть убей, я не понимаю щастья оборачивать словарь. Это не наш метод
...
Рейтинг: 0 / 0
01.10.2013, 13:25
    #38413001
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУАлексей К
Код: c#
1.
var d = Enumerable.Range(1, 100).ToDictionary(v => i, v => "i = " + i.ToString());


Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer<i>' because it is not a delegate type.Упс... :-)
...
Рейтинг: 0 / 0
01.10.2013, 13:28
    #38413010
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУГде-то в степи, хоть убей, я не понимаю щастья оборачивать словарь. Это не наш метод
Я оборачивал
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
    public class Set<T> : ICollection<T>
    {
        Dictionary<T, bool> _dictionary;
        List<T> _list = new List<T>();

        #region Construct

        public Set()
        {
            _dictionary = new Dictionary<T, bool>();
        }

        public Set(IEqualityComparer<T> comparer)
        {
            _dictionary = new Dictionary<T, bool>(comparer);
        }

        public Set(params T[] items)
            : this()
        {
            AddRange(items);
        }

        public Set(IEqualityComparer<T> comparer, params T[] items)
            : this(comparer)
        {
            AddRange(items);
        }

        public Set(IEnumerable<T> items)
            : this()
        {
            AddRange(items);
        }

        public Set(IEqualityComparer<T> comparer, IEnumerable<T> items)
            : this(comparer)
        {
            AddRange(items);
        }

        #endregion
        
        #region ICollection<T> Members

        public void Add(T item)
        {
            _dictionary.Add(item, false);
            _list.Add(item);
        }

        public void Clear()
        {
            _dictionary.Clear();
            _list.Clear();
        }

        public bool Contains(T item)
        {
            return _dictionary.ContainsKey(item);
        }

        public void CopyTo(T[] array, int arrayIndex)
        {
            _list.CopyTo(array, arrayIndex);
        }

        public int Count
        {
            get { return _list.Count; }
        }

        public bool IsReadOnly
        {
            get { return false; }
        }

        public bool Remove(T item)
        {
            bool result = _dictionary.Remove(item);
            if (result)
            {
                int ind = _list.FindIndex(v => _dictionary.Comparer.Equals(item, v));
                _list.RemoveAt(ind);
            }
            return result;
        }

        #endregion

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            return _list.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return ((IEnumerable)_list).GetEnumerator();
        }

        #endregion      
  
        #region Mix

        public void AddRange(params T[] items)
        {
            AddRange((IEnumerable<T>)items);
        }

        public void AddRange(IEnumerable<T> items)
        {
            foreach (T item in items)
                Add(item);
        }

        public void AddIfNotContains(T item)
        {
            if (Contains(item) == false)
                Add(item);
        }

        public T[] ToArray()
        {
            T[] result = new T[Count];
            CopyTo(result, 0);
            return result;
        }

        #endregion
    }

...
Рейтинг: 0 / 0
01.10.2013, 13:58
    #38413057
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet для .NET2.0
МСУжрёт много>>О каком жоре идет речь?
память жрёт

>>> ну и в диапазоне нельзя искать
>>> LINQ
тупой перебор элементов это не поиск.

>>> а то был бы просто индексированный столбец
>>> И что ты с ним делал бы?
полезная вещица в хозяйстве сгодится
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / HashSet для .NET2.0 / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]