2

半分の時間は文字列とその名前に基づいて値を見つける必要があり、残りの半分はintとそのユーザーIDに基づいて値を見つける必要があります。

現在、このジレンマを解決するために2つの辞書があります。1つは文字列をキーとして使用し、もう1つはintをキーとして使用します。これを行うためのより効率的な方法、つまりintまたはstringに基づいて値を取得する方法があるかどうか疑問に思いました。

    public static Dictionary<int, Player> nPlayers = new Dictionary<int, Player>();
    public static Dictionary<string, Player> sPlayers = new Dictionary<string, Player>();

他の質問をスキャンした後、誰かが辞書の辞書を使用して言及しました。誰かがこれについて詳しく説明できるなら(それが私が探している解決策であるなら)、それは壮大だろう

タプルについてはよくわかりませんが、理解していることから、 2つのキーが必要であり、探しているものはどちらか一方を取ります。

トリックをしますかDictionary<object, Player>?何も思いつきません。

私の偏狭なコーディング経験を手伝ってください。; _;

4

4 に答える 4

1

あなたの解決策(2つの辞書)は正しいものです。ディクショナリは、1 つの安定したキーによってのみインデックスを作成できます。その結果、異なるキーで索引付けするために別個の辞書を保持する必要があります。

于 2012-05-29T17:54:25.967 に答える
1

Dictionary<object,Player>2 つの異なる辞書を持つことよりも、aを持つことが良い考えだとは思いません。おそらく同じ量のメモリを必要とし (それぞれのPlayer参照が統合辞書に 2 回保存されるため)、おそらくあまり明確ではなく、キーがいくつかの異なるタイプになる可能性があるため、(おそらく) ハッシュコードの衝突で問題が発生する可能性があります。

と の 2 つの辞書を保持PlayersByNamePlayersByID、必要に応じて使用します。

于 2012-05-29T17:52:38.083 に答える
1

辞書に入れられた元のデータ型を将来知りたいですか? そうでない場合は、次の 2 つのオプションがあります。

  1. ストリングスタイプ!-stringキーとして a を使用し、それに追加するときに.ToString()整数を呼び出します:)

  2. Be objective -objectキーとして an を使用すると、その中に好きなものを入れることができます。

2に基づいて、まだある種の型制限があるため、最初のものをお勧めします。

将来元のデータ型を知りたい場合-実装は問題ありません:)

于 2012-05-29T17:52:57.630 に答える
1

ユーザーがシステムにログインしたときのコメントに従って、それらを辞書に追加します。ここでは、両方の辞書に追加する必要があります。

別の方法でこれを行うことができると思います。

   public static List<Player> nPlayers = new List<Player>();

必要なのは、ログイン時にプレーヤーを追加することだけです。

ID、名前などで検索したい場合は、nPlayers をクエリしてプレーヤーを見つけることができます。

 var playerByID = nPlayers.Where(p= p.ID==givenID).FirstOrDefault();

 var playerByName = nPlayers.Where(p= p.Name==givenName).FirstOrDefault();
于 2012-05-29T18:27:41.610 に答える