合并两个词典进入观察的集合 - C#
问题描述:
我定义如下一个简单的类:在格言这个样子的合并两个词典进入观察的集合 - C#
Class Data
{
public datetime DATES {get;set;}
public double ValueA {get;set;}
public double ValueB {get;set;}
}
Dictionary<double, Data> DictA= new Dictionary<double, Data>();
Dictionary<double, Data> DictB= new Dictionary<double, Data>();
值; (日期,值a)
1/1/2001, 100
2/1/2001, 150
3/1/2001, 400
价值观DictB这个样子的; (日期,VALUEB)
2/1/2001, 200
3/1/2001, 400
4/1/2001, 300
5/1/2001, 150
我也有一个observable collection
为:
ObservableCollection<Data> curveResults = new ObservableCollection<Data>();
public ObservableCollection<Data> CurveResults
{
get { return curveResults; }
set
{
curveResults = value;
base.OnPropertyChanged("CurveResults");
}
}
我想如果你要双空值获取集合填充为
Dates, ValueA, ValueB
1/1/2001, 100, null
2/1/2001, 150, 200
3/1/2001, 400, 400
4/1/2001, null, 300
5/1/2001, null, 150
答
属性,类数据应该是这样的:
class Data
{
public DateTime DATES { get; set; }
public double? ValueA { get; set; }
public double? ValueB { get; set; }
}
下面是代码:
Dictionary<double, Data> DictA = new Dictionary<double, Data>();
Dictionary<double, Data> DictB = new Dictionary<double, Data>();
DictA.Add(0, new Data() { DATES = new DateTime(2001, 1, 1), ValueA = 100 });
DictA.Add(1, new Data() { DATES = new DateTime(2001, 2, 1), ValueA = 150 });
DictA.Add(2, new Data() { DATES = new DateTime(2001, 3, 1), ValueA = 400 });
DictB.Add(0, new Data() { DATES = new DateTime(2001, 2, 1), ValueB = 200 });
DictB.Add(1, new Data() { DATES = new DateTime(2001, 3, 1), ValueB = 400 });
DictB.Add(2, new Data() { DATES = new DateTime(2001, 4, 1), ValueB = 300 });
DictB.Add(3, new Data() { DATES = new DateTime(2001, 5, 1), ValueB = 150 });
var tempDictA = DictA.Values.ToDictionary(x => x.DATES, x => x.ValueA);
var tempDictB = DictB.Values.ToDictionary(x => x.DATES, x => x.ValueB);
ObservableCollection<Data> result
= new ObservableCollection<Data>(tempDictB.Select(x => tempDictA.ContainsKey(x.Key)
? new Data() { DATES = x.Key, ValueA = tempDictA[x.Key], ValueB = x.Value }
: new Data() { DATES = x.Key, ValueA = null, ValueB = x.Value })
.Concat(DictA.Where(x => !tempDictB.ContainsKey(x.Value.DATES))
.Select(x => new Data() { DATES = x.Value.DATES, ValueA = x.Value.ValueA, ValueB = null }))
.OrderBy(x => x.DATES));
究竟有你观察到的与此有关呢? – NtFreX
哦,我想用它来绘制数据。然后我会使用可观察的集合。 – user7157732
你可以给'ObservableCollection'的构造函数''Dictionary'实现的'IEnumerable'。几乎每个集合都实现它。 – NtFreX