根据键获取列表List <t>中的自定义对象T.

时间:2015-12-11 14:17:18

标签: c# asp.net

我列出了我称之为Actions的内容

public class Actions
{
        public string Type { get; set; }
        public string Observations { get; set; }

        public Actions(
            string type,
            string observations)
        {
            Type = type;
            observations= type;
        }
}

我稍后在像List<Actions> data= new List<Actions>();

这样的列表中使用

此列表将包含鸟类的类型以及观察到的时间。这个数据来自我逐个阅读的文件。因此,在循环内部,我可能会找到Eagle, 1,这意味着我必须在该列表中找到具有type==Eagle并在其observations键上添加+1的对象。

我可以迭代这个列表,然后检查它的i对象的type键是否具有我想要的值并增加它observations

有谁知道更好的方式来做我想要的事情?

2 个答案:

答案 0 :(得分:4)

  

我可以迭代这个列表,然后检查它的第i个对象的类型键是否具有我想要的值并增加它的观察值。

是的,那会有用。

你这样做:

var birdToUpdate = birdList.FirstOrDefault(b => b.Type == keyToFind);
if (birdToUpdate == null)
{
    birdToUpdate = new Actions(keyToFind, 0);
    birdList.Add(birdToUpdate);
}
birdToUpdate.Observations++;

如果没有返回,则是该鸟的第一次观察,因此您添加它。

然后,如果你想在混音中添加颜色:

var birdToUpdate = birdList.FirstOrDefault(b => b.Type == keyToFind 
                                             && b.Color == colorToFind);
if (birdToUpdate == null)
{
    birdToUpdate = new Actions(keyToFind, colorToFind, 0);
    birdList.Add(birdToUpdate);
}
birdToUpdate.Observations++;

另一种方法是将此类全部转储并引入Dictionary<string, int>,其中键是鸟的名称,int是观察的数量。

或者,如果您坚持使用此课程,请考虑该课程的正确名称,并将其设为Dictionary<string, Actions>

伪:

Actions actionForBird;

if (!dictionary.TryGetValue(keyToFind, out actionForBird))
{
    actionForBird = new Actions(keyToFind, 0);
    dictionary[keyToFind] = actionForBird;
}

actionForBird.Observations++;

答案 1 :(得分:0)

尝试使用Dictionary

使用lambda表达式

例如

\d

将用户输入放入var type = 'eagle'; Dictionary<string, int> observations = new Dictionary<string, int>(); var obj = observations.FirstOrDefault(p => p.Key == type);