2012-06-13 15 views
6

Jestem bardzo nowy w słownikach. Bardzo nowe znaczenie, z którego zacząłem korzystać około 6 godzin temu: s. W każdym razie chcę wiedzieć, czy istnieje sposób na zmianę klucza słownika.Zmiana klucza słownika

Oto mój słownik:

Dictionary<string, string> Information = new Dictionary<string, string>(); 

Oto jak dodaję do słownika (ten jest zwolniony za każdym razem, gdy użytkownik wchodzi do informacji i uderza w przycisk:

Information.Add(txtObjectNumber.Text, addressCombined); 

potrzeb użytkownika aby móc edytować oba pola, a także usunąć cały rekord.

Tak samo aplikacja musi dodać txtNumber i txtComments w tutaj txtNumber = txtObjectNumber

Dziękuję za pomoc.

+0

Gdzie w twoim kodzie pojawiają się "txtNumber" i "txtComments"? Czy na pewno chcesz użyć słownika zamiast listy obiektów przechowujących dwie (lub więcej) wartości? –

+3

Prawdopodobnie nie korzystasz z właściwej struktury danych. – Oded

+0

Przepraszam, że to tylko pola tekstowe, do których użytkownik może wprowadzić dane. Zdecydowanie powinienem być bardziej przejrzysty. – JLott

Odpowiedz

3

Kluczem jest mechanizm, który pozwoli ci znaleźć dane ("wartość") później.

Na przykład, jeśli nie

information.Add("Kris", "Vandermotten"); 

byłbyś w stanie znaleźć „Vandermotten” później, jeśli znasz „Kris”.

Co w tym kontekście oznacza zmiana "Kris"? Podajesz dane pod nazwą "Kris" i chcesz je odzyskać, wyszukując hasło "Bob"? Nie znajdziesz tego.

W pewnym sensie klucze słownika są bardzo podobne do kluczy podstawowych w relacyjnej bazie danych. Odwoływanie się do logicznej tożsamości wartości. Z jednej więc strony powinny one być jednoznacznie identyfikujące.

Więc może ten przykład nie ma sensu. Może coś w stylu ma więcej sensu. Pytanie brzmi oczywiście: co to jest 42? Czasami istnieje naturalny kandydat na taki klucz, jak na przykład numer pracownika lub coś takiego, czasami nie ma.

Kiedy nie ma, być może trzeba zrobić

List<Person> information = new List<Person>(); 

information.Add(new Person("Kris", "Vandermotten")); 

I oczywiście, jeśli obiekt Person umożliwia zmianę Imię nieruchomości, i to, co chcesz zrobić, to zrób to. Ale "zmiana kluczy słownikowych" nie ma dla mnie większego sensu.

+0

Czytałem twój przykład i było jak, skąd wziął "Vandermotten". Wtedy zobaczyłem twoje imię na końcu. Myślałem tylko o super imieniu. – DidIReallyWriteThat

+0

@CalvinSmith Dzięki. Mój tata mi to dał. Przekażę twój komentarz. ;-) –

10

Nie można bezpośrednio zmodyfikować klucza. Musisz go usunąć i ponownie dodać.

0

Nie można zmienić klucza istniejącego elementu słownikowego. Możesz usunąć poprzedni klucz i dodać nowy klucz/wartość w oparciu o edycję.

przykład przypadek użycia:

dodać klucz: Nazwa, Wartość: Bob

Teraz chcesz zmienić Name do FirstName, to musiałby zrobić

wyjąć kluczyk Name z dictionnary Dodaj Key : FirstName, Wartość: Bob

0

Twoje użycie słownika tutaj wydaje się trochę nie na miejscu. Podobnie jak sugeruje nazwa, słowniki mają na celu zapewnienie użytkownikowi sposobu "wyszukiwania" wartości opartej na kluczu. W twoim przypadku zdaje się, że używasz go do przechowywania dwóch powiązanych danych, z których każda może się zmienić. W takim przypadku prawdopodobnie lepiej jest po prostu użyć listy i utworzyć osobną klasę, która zawiera obie części informacji. Coś jak

public class MyData 
{ 
    public string SomeData { get; set; } 
    public string OtherData { get; set; } 
} 

a następnie

List<MyData> myDataList; 

Lub może nawet chcą mieć słownika, który mapuje non zmienia klucz (może identyfikator użytkownika) do niestandardowej klasy:

Dictionary<string, MyData> myDataDictionary; 
1

Możesz użyć wbudowanej metody Remove() dla twojego Słownika. Lub możesz zrobić to na własnej skórze, powtarzając kolekcję. Chociaż jestem ciekawy, dlaczego musiałbyś stale aktualizować klucze, a nie tylko wartości.

+0

Muszę zrobić jedno i drugie. Prawie wszystkie klucze to numery produktów wodomierza. Po wymianie klucz produktu zmieni się, a komentarze mogą ulec zmianie. Adres musi pozostać taki sam. – JLott

+0

To brzmi, jakbyś potrzebował słownika i Dictionary

+0

Dang ... Dlaczego nie pomyślałem o tym haha. Dzięki, właśnie uratowałeś mnie przed koniecznością zmiany wielu rzeczy. Może być trochę niechlujnie, ale powinno działać haha. – JLott

Powiązane problemy