寻找适合此场景的数据结构(最好是Dictionary和List)
本文关键字:Dictionary List 数据结构 寻找 | 更新日期: 2023-09-27 18:12:21
在方法调用中,对象正在被传递。
从这个对象我可以得到两个东西:一个ItemData
属性和一个Row
属性,例如:
oPTL.ItemData, oPTL.Row
我想有一个数据结构,每次这个方法被调用时,它可以更新这个数据结构,例如一次oPTL.ItemData
是"Spread1"
, oPTL.Row
是2
,所以我们应该能够保存Spread1
的值2
…例如,下一次调用我们应该能够保存"Spread3"的值为3..下一个调用"Spread1"也有值4,等等…
所以它就像一个Dictionary<String,<List>>
,但我仍然有问题声明和使用它在代码中以这种方式,任何代码样本你可以帮助我?
您可以使用list作为值的字典:
IDictionary<string, List<int>> rows = new Dictionary<string, List<int>>();
要填充它,您可以使用以下扩展方法:
public static class DictionaryDefaultExtension
{
public static TValue GetOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> dictionary,
TKey key,
Func<TValue> defaultValue)
{
TValue result;
if (dictionary.TryGetValue(key, out result))
{
return result;
}
else
{
TValue value = defaultValue();
dictionary[key] = value;
return value;
}
}
}
像这样使用:
d.GetOrDefault(oPTL.ItemData, () => new List<int>()).Add(oPTL.Row);
您正在寻找的是Dictionary<string, List<int>>
-假设您的.ItemData
和.Row
属性实际上分别是string
和int
。
当读取值为"Spread1"的项时,首先通过调用.ContainsKey(string)
方法检查该键是否已经存在于字典中。如果是,则添加新的Row
值—如果不是,则使用全新的列表创建新键,如下例所示:
var myItems = new Dictionary<string, List<int>>();
// ...
if (myItems.ContainsKey(newItem.ItemData))
{
// myItems[newItem.ItemData] actually contains List<int> we created at some
// point in the other part of if-else.
// The .Add method we call here belongs to List
List<int> itemValues = myItems[newItem.ItemData];
itemValues.Add(newItem.Row);
}
else
{
myItems.Add(newItem.ItemData, new List<int> { newItem.Row });
}
编辑添加两个.Add
方法的澄清。