列表作为对象属性的对象列表

时间:2018-05-04 09:25:48

标签: c# string list object

声明对象列表:

List<object> result = new List<object>();

以及用于存储ID的int列表:

List<int> ids = new List<int>();

我想存储在包含result对的(string, list of int)个对象中。

它对(string, int)对很好,但我希望当有2个相同的字符串只有一个对象并且int值存储在列表中时。

例如:{pars = "xxx", id = 1} , {pars = "xxx", id = 2}变为{pars = "xxx", id = (1,2 )}

为了执行初始功能,我使用foreach通过一个对象,我从中获取字符串(pars)和id:

    foreach (dataBinding in myData)
    {
        var x = string.Join(" ", dataBinding.Params.Select(p => p.myDescription));

        result.Add(new { pars = x, id = dataBinding.Id });

    }

Params中可能会有更多字符串,这就是我使用联接的原因。

因为它在这里通过创建具有(string, int)形式的对象来工作。但我的目标是使它成为(string, list of int),并且如果有两个具有相同字符串的对象将它们组合起来,就像我之前写的那样。

我尝试将ids列表添加为对象的第二个属性,但可能我没有正确执行此操作。

 result.Add(new { pars = x, ids = dataBinding.Id });

3 个答案:

答案 0 :(得分:1)

也许我并不完全理解这个场景,但我怀疑使用以下内容可以达到目的。

List<Dictionary<string, List<int>>>

当密钥不存在时,您可以添加密钥,只需添加密钥即可。

答案 1 :(得分:1)

您可以使用LINQ,尤其是GroupBy

Dictionary<string, List<int>> descriptionIDs = myData
    .GroupBy(x => x.myDescription)
    .ToDictionary(g => g.Key, g => g.Select(x => x.Id).ToList());

现在你甚至还有一本字典,而不仅仅是一个包含匿名类型的奇怪的List<object>

正如有人提到的那样,你也可以使用我更喜欢的ToLookup

var descriptionLookup = myData.ToLookup(x => x.myDescription);

现在您可以轻松获取ID列表:

var result = descriptionLookup.Select(g => new { pars = g.Key, ids = g.Select(x=> x.Id).ToList() }).ToList():

答案 2 :(得分:1)

下面的程序描述了当前的通用集合类型,如果Key已经存在,也允许添加新值。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {

        MyProgram p = new MyProgram();

        p.Add("First" , 5);
        p.Add("Second" , 8);
        p.Add("Third" , 9);
        p.Add("First" , 6);
        p.Add("First" , 7);

        p.PrintDictionary();
    }
}


public class MyProgram
{
    private Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();

    public void Add(string key, int value)
    {
        if (dict.ContainsKey(key))
        {
            dict[key].Add(value);
        }
        else
        {
            dict.Add(key, new List<int>() {value});
        }
    }

    public void PrintDictionary()
    {
        foreach(var keyValue in dict)
        {
            Console.WriteLine("Key : " + keyValue.Key);

            foreach(var val in keyValue.Value)
            {
                Console.WriteLine(string.Format("\t Value : {0}", val));
            }
        }
    }
}

输出:

  

关键:首先

Value : 5

Value : 6

Value : 7
     

关键:第二次

Value : 8
     

关键:第三次

Value : 9

选中Live Fiddle