Jak sprawdzić przy dodawaniu obiektów do kolekcji List czy nie mam duplikatów 32

0

Jak uniemożliwić dodanie duplikatu obiektu do kolekcji List ?

2

Albo zmienić List na Set, albo użyć metody contains.

0

Jeżeli zależy Ci żeby zachować kolejność dodanych elementów to możesz skorzystać z List.contains(), która sprawdza czy lista zawiera jakiś obiekt.

Jeżeli nie, to możesz skorzystać z jednej implementacji zbioru (HashSet, TreeSet). Wtedy po prostu dodajesz obiekt do zbioru i on już sam dba o to żeby w zbiorze nie było duplikacji.

0

Nie zależy mi na kolejności, a HashSet mam właśnie użyte w tej chwili ale z racji tego że mam metodę w której musz użyć List to i tu musze zmienić na List. Użyje w takim razie contains.

2

A ta metoda, która musi używać List<T> to twoja?

Bo jeśli tak, to może lepiej zastanowić się, czy nie powinna przyjmować jakiegoś interfejsu(np. IEnumerable<T>, albo ICollection<T>) zamiast ograniczać się do konkretnej implementacji List<T>.

A tak poza tym, to zamiast za każdym razem sprawdzać .Contains(), możesz używać HashSeta, a przy przekazywaniu zrobić na nim .ToList().

0

Tak moja

 public async Task<List<ProfileModel>> GetProfileList()
        {
            var content = await FileManagerInstance.ReadFile(FileManager.FileType.ProfileList);

            if(string.IsNullOrEmpty(content)) return null;
            try 
            {
                _profileList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ProfileModel>>(content);
            } 
            catch(Newtonsoft.Json.JsonException ex)
            {
                Debug.WriteLine("Result content is bad!");

                if (Debugger.IsAttached) 
                {
                    throw ex;
                }
            }

            return _profileList;

        } 

Mam też metodę zapisującą profile właśnie używającej HashSet. Problem jest w tym ze tu nie mogę użyć HashSet-a

0

Ale to Ty chcesz zdeserializować kolekcję obiektów z JSONa, i pozbyć się z niej duplikatów?
Czy chcesz uniemożliwić dodawanie duplikatów już później, w dalszym kodzie aplikacji, który operuje na tej odczytanej liście?

0

W dalszym kodzie aplikacji. To jest metoda która pobiera mi profile ale mam tez metode ktora mi zapisuje profile. Kolekcje do której są zapisywane profile po włączeniu aplikacji musi się zainicjalizować danymi. WIem że to brzmi banalnie ale ...:)

2

To czemu nie możesz zwrócić HashSeta z tej metody?

0

Finalnie te dane wyświetlam później w ListView (programuje w Xamarinie a raczej zaczynam, wcześniej miałem styczność tylko z Java) ale przechodzi to jeszcze przez observablecollection i nie wiem czy to nie blokuje mi wyświetlania HashSet

0

Konstruktor ObservableCollection przyjmuje wszystko, co implementuje IEnumerable<T>, więc nie ma powodu, żeby nie współpracował z HashSet.

1 użytkowników online, w tym zalogowanych: 0, gości: 1