背景:对于我的用户,我需要存储一对相同的对象类型(设置),目前我有它像
Dictionary<long, List<KeyValueType<Setting, Setting>>> SettingKeyPairs
我正在创建带有设置的KeyValueTypes,并将其添加到列表中(每个用户都有一个列表)。我的设置有一个值字段(它显示了它们是否比其他设置“更重要”),所以我希望基于该字段添加它们,稍后我还需要基于该字段(可能还需要基于名称字段)进行搜索--所以搜索将不得不在列表中查找,然后在KeyValueTypes中查找
问题:什么是最好的数据来代替KeyValueTypes?对于添加/搜索部分,当我需要根据一个特定的值/值来做它时,它很麻烦。我也尝试过元组,但仍然不认为这是好的。
从你的问题上很难说--也许我并不完全理解。但我可能会存储setting
类型的列表,并公开一个返回最高值的getter(或任何条件)。
public class RankedSettings
{
public RankedSettings(IEnumerable<Setting> settings)
{
_settings = settings;
}
private readonly IEnumerable<Setting> _settings;
public Setting GetHighestValue() => _settings.OrderByDescending(x => x.Value).FirstOrDefault();
}
...
var userSettingsCollection = new Dictionary<long, RankedSettings>();
...
var settings = userSettingsCollection[userId]?.GetHighestValue();
当然,您可以更好地将其打包,以便重写字典getter来为您执行GetHighestValue()调用。