6

私は辞書にとても慣れていません。私が約6時間前にそれらを使い始めたという非常に新しい意味:p。とにかく、辞書のキーを変更する方法があるかどうか知りたいです。

これが私の辞書です:

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

これが私が辞書に追加する方法です(これは、ユーザーが情報を入力してボタンを押すたびに発生します:

Information.Add(txtObjectNumber.Text, addressCombined);

ユーザーは、両方のフィールドを編集できるだけでなく、レコード全体を削除できる必要があります。

そのため、アプリケーションはどこに追加する必要がtxtNumberありますかtxtCommentstxtNumber = txtObjectNumber

ご協力ありがとうございました。

4

5 に答える 5

11

キーを直接変更することはできません。削除して再度追加する必要があります。

于 2012-06-13T20:58:01.950 に答える
3

重要なのは、後でデータ (「値」) を見つけることができるメカニズムです。

たとえば、

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

「Kris」を知っていれば、後で「Vandermotten」を見つけることができます。

その文脈で、 「クリス」を変えるとはどういう意味ですか?「Kris」という名前でデータを入力し、「Bob」を検索してそれを取り戻したいですか? あなたはそれを見つけることができません。

ある意味で、ディクショナリ キーはリレーショナル データベースの主キーに非常に似ています。値の論理 ID を参照します。したがって、1 つには、一意に識別する必要があります。

したがって、この例は意味をなさないかもしれません。多分何かのような

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

より理にかなっています。もちろん、問題は次のとおりです。42は何ですか?従業員番号などのように、そのようなキーの自然な候補がある場合もあれば、ない場合もあります。

何もないときは、多分あなたがする必要があります

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

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

もちろん、Person オブジェクトで名のプロパティを変更できる場合は、それを実行してください。しかし、「辞書のキーを変更する」ことは私にはあまり意味がありません。

于 2012-06-13T21:07:56.733 に答える
1

Dictionary に組み込みの Remove() メソッドを使用できます。または、コレクションを繰り返し処理するという難しい方法で行うこともできます。値だけでなく、キーを常に更新する必要がある理由については興味がありますが。

于 2012-06-13T21:01:36.720 に答える
0

ここでの辞書の使用は少しずれているようです。名前が示すように、辞書は、キーに基づいて値を「検索」する方法を提供することを目的としています。ただし、あなたの場合は、2 つの関連するデータを保存するために使用しているように見えますが、どちらも変更される可能性があります。その場合、おそらくリストを使用して、両方の情報をカプセル化する別のクラスを作成する方がよいでしょう。何かのようなもの

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

その後

List<MyData> myDataList;

または、変更されないキー (おそらくユーザー ID) をカスタム クラスにマップする辞書が必要になる場合もあります。

Dictionary<string, MyData> myDataDictionary;
于 2012-06-13T21:00:06.170 に答える
0

既存の辞書項目のキーは変更できません。できることは、以前のキーを削除し、編集に基づいて新しいキー/値を追加することです。

使用例:

キー:名前、値:ボブを追加

に変更NameしたいFirstName場合は、次のことを行う必要があります。

ディクショナリからキーを削除 キーName:FirstName、値: Bob を追加

于 2012-06-13T20:58:58.213 に答える