1

グリッドにバインドできるように、をに変換する必要がありdictionaryます。list

dictionaryキーstringとして、そしてとしてのを持っています。arraydoubles

の関数を使用してdictionaryをに変換できますが、グリッドにバインドすると、グリッド列にオブジェクトとして表示されます。listToList<>dictionaryarray

arrayの値をdoublesに追加するにはどうすればよいlistですか?をに変換するarrayと同時に、値をリストに抽出する方法はありますか?dictionarylist

これは私が現在行っていることです:

List<KeyValuePair<string, double[]>> dataList = 
                    dataDictionary.ToList<KeyValuePair<string, double[]>>();

グリッドに表示するには、(doubleの配列はサイズ2です)のとstring両方のdouble値を保持する必要があります。array

私はこれを見ましたが、必要なものに実装できませんでした: 辞書をList<KeyValuePair>に変換します

任意の提案や助けをいただければ幸いです。

前もって感謝します、

マーワン

PS-グリッドにバインドできるようにをに変換することも考えましたdictionaryが、datatableそれが実行可能かどうかはわかりません。

4

5 に答える 5

3
IList<double> list = dictionary.SelectMany(item => item.Value).ToList();

グリッドに表示するには、文字列と配列内の両方のdouble値(doubleの配列はサイズ2)を保持する必要があります。

ビューを反復処理する追加のロジックを実装する必要がarrayあります。また、2つの値を手動で作成Tuple<string,double,double>してバインドすることもできます。double

            Func<double[], int, double?> safeGet = (array, index) => array.Length - 1 >= index ? (double?)array[index] : null;
            var list = dataList.Select(item => Tuple.Create(item.Key, safeGet(item.Value, 0), safeGet(item.Value, 1))).ToList();
于 2012-08-16T05:52:23.810 に答える
2

リストする辞書

    Dictionary<string, double[]> dict = new Dictionary<string, double[]>();
    dict.Add("1", new double[] { 1.10, 1.20 });
    dict.Add("2", new double[] { 2.10, 2.20 });
    dict.Add("3", new double[] { 3.10, 3.20 });
    dict.Add("4", new double[] { 4.10, 4.20 });
    dict.Add("5", new double[] { 5.10, 5.20 });

     var lstRecord = dict.Select(i => new { Key = i.Key, Val1 = i.Value[0], Val2 = i.Value[1] }).ToList();
     dataGridView1.DataSource = lstRecord;

データテーブルへの辞書

        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<string, double[]> dict = new Dictionary<string, double[]>();
            dict.Add("1", new double[] { 1.10, 1.20 });
            dict.Add("2", new double[] { 2.10, 2.20 });
            dict.Add("3", new double[] { 3.10, 3.20 });
            dict.Add("4", new double[] { 4.10, 4.20 });
            dict.Add("5", new double[] { 5.10, 5.20 });

            dataGridView1.DataSource = Dictionary2Table(dict);
        }

        public DataTable Dictionary2Table(Dictionary<string, double[]> dict)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("key", typeof(string));
            dt.Columns.Add("Value1", typeof(double));
            dt.Columns.Add("Value2", typeof(double));
            dict
                .Select(i => new { Key = i.Key, Val1 = i.Value[0], Val2 = i.Value[1] })
                .ToList()
                .ForEach(i=>dt.Rows.Add(i.Key,i.Val1,i.Val2));
            return dt;
        }

お役に立てれば

于 2012-08-16T10:10:46.880 に答える
1

これを試して:

    Dictionary<string, double[]> dict = new Dictionary<string, double[]>()
    {
        {"a",new double[]{1,2}},
        {"b",new double[]{3,4}}
    };
        List<Tuple<string, double, double>> list = dict.Select(kvp => Tuple.Create(kvp.Key, kvp.Value[0], kvp.Value[1])).ToList();
于 2012-08-16T06:11:33.270 に答える
1

これはどうですか

public class HelperClass
{
    private readonly KeyValuePair<string, double[]> Item;

    [Bindable]
    public string Key { get { return Item.Key; } }

    [Bindable]
    public double Value1 {get { return Item.Value[0]; } }

    [Bindable]
    public double Value2 {get { return Item.Value[1]; } }

    public HelperClass(KeyValuePair<string, double[]> item)
    {
        this.Item = item;
    }
}

public List<HelperClass> Convert(Dictionary<string, double[]> items)
{
    var result = new List<HelperClass>(items.Count);
    foreach(var item in items)
        result.Add(new HelperClass(item));
    return result;
}

これで、グリッドをにバインドできますList<HelperClass>

于 2012-08-16T06:11:42.633 に答える
1

これにはタプルを使用できます。

var result = dataDictionary.Select(x => Tuple.Create(x.Key, x.Value[0], x.Value[1]))
                           .ToList();
于 2012-08-16T07:02:52.750 に答える