-1

私は現在、プログラムの開始時のデータとそのようなものをロードする辞書を持っています:

  Dictionary<string, List<KeyValuePair<string,string>>> variants =
    new Dictionary<string, List<KeyValuePair<string, string>>>();

特定の文字列のKeyvaluepairリストにアクセスしたい場合、どのように参照しますか...

これがその理解です:各リストには識別子(文字列)があります->文字列はキーと値のペアのリストにつながります、そして私はそれらをランダムに選びたいです

4

4 に答える 4

3

それを分解しましょう:

// This is your dictionary.
Dictionary<string, List<KeyValuePair<string,string>>> variants = new Dictionary<string, List<KeyValuePair<string, string>>>();

// Let's get the list of variants for a given key.
string key = "myKey";
List<KeyValuePair<string,string>> variantsForKey = variants[key];

// If we wanted to get the first variant, we'd use one of these:
KeyValuePair<string,string> firstVariant = variantsForKey[0];
firstVariant = variantsForKey.First(); // Using Linq for fun and profit!

// Now, we want a random variant? No problem!
Random rand = new Random(); // Remember to initialize this only once!
int listLength = variantsForKey.Count;
int randomVariantIndex = rand.Next(0, listLength );
KeyValuePair<string,string> randomVariant = variantsForKey[randomVariantIndex];

出来上がり!

ここで、実行したいのは、これらの最後の3行を拡張メソッドでラップすることです。

public static class VariantExtensions
{
    private static Random rand = new Random();
    public static KeyValuePair<string,string> GetRandomVariant(this List<KeyValuePair<string,string>> variantsForKey)
    {
         int listLength = variantsForKey.Count;
         int randomVariantIndex = rand.Next(0, listLength );
         return variantsForKey[randomVariantIndex];
    }
}

そして今、あなたはこれを使うことができます:

Dictionary<string, List<KeyValuePair<string,string>>> variants = ...;
string key = "myKey";
KeyValuePair<string,string> randomVariant = variants[key].GetRandomVariant();
于 2013-02-05T19:54:32.340 に答える
1

演算子を使用し[]ます。

値をハッシュテーブルに入れるには、

このような:variants[key] = valueHere;

ハッシュテーブルから値を取得するには、

var valueHere = variants[key];

于 2013-02-05T19:45:49.290 に答える
1

あなたが何を求めているのかを正確に理解するのは難しいです。これは役に立ちますか?

using System;
using System.Collections.Generic;

namespace SO14715593
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, List<KeyValuePair<string, string>>> variants = new Dictionary<string, List<KeyValuePair<string, string>>>();
            variants["test"] = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("key1", "item1"),
                    new KeyValuePair<string, string>("key2", "item2"),
                    new KeyValuePair<string, string>("key3", "item3")
                };

            Random random = new Random();
            int index = random.Next(variants["test"].Count);
            Console.WriteLine("{0};{1}", variants["test"][index].Key, variants["test"][index].Value);
        }
    }
}
于 2013-02-05T19:51:38.707 に答える
0

次のようなものを使用できます。

var list = variants[stringToGetCorrespondingList]

于 2013-02-05T19:48:53.503 に答える