在列表列表中获取自定义对象T<;T>;基于密钥
本文关键字:列表 于密钥 密钥 lt 获取 自定义 对象 gt | 更新日期: 2023-09-27 18:26:23
我有一个我称之为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
。
有人知道做我追求的事情的更好方法吗?
当然,我可以迭代这个列表,检查它的第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++;
尝试使用字典使用lambda表达式
示例
var type = 'eagle';
Dictionary<string, int> observations = new Dictionary<string, int>();
var obj = observations.FirstOrDefault(p => p.Key == type);
将用户输入放入var type