gpt4 book ai didi

c# - 在集合中查找日期最近的项目

转载 作者:太空狗 更新时间:2023-10-29 22:24:55 25 4
gpt4 key购买 nike

如果我有一组日期和值。我想获得的值是:

  1. 与集合中的日期相关联
  2. 如果它不存在,我想在我正在寻找的点周围的两个点之间进行线性插值

ao,这是一个简单的例子。如果集合是:

Date   Value  
1/1/2009 100
1/1/2010 200
1/1/2011 300

如果我正在寻找 6/1/2010,我会返回 250 的值。如果一个集合比另一个(字典、数组等)更擅长解决问题,我可以使用任何集合

最佳答案

您可以使用 List 类型来保存对,对它们进行排序并使用 List.BinarySearch。

例如你可以有类似下面的东西:

struct Pair
{
public Pair(DateTime t, int v)
{
date = t;
value = v;
}
public DateTime date;
public int value;
}

....

List<Pair> pairs = new List<Pair>();


pairs.Add(new Pair(DateTime.Now, 100));
pairs.Add(new Pair(DateTime.Now, 200));

....

// Sort using the time.
pairs.Sort(delegate(Pair pair1, Pair pair2) {
return pair1.date.CompareTo( pair2.date);
}
);

// Do binary search.
int index = pairs.BinarySearch(new Pair(dateToSearch, 0),
delegate(Pair pair1, Pair pair2) {
return pair1.date.CompareTo(pair2.date);
});

if (index >= 0) {
// Found the element!
return pairs[index].value;
}

// If not found, List.BinarySearch returns the complement
// of the index where the element should have been.
index = ~index;

// This date search for is larger than any
if (index == pairs.Count) {
//
}

// The date searched is smaller than any in the list.
if (index == 0) {
}

// Otherwise return average of elements at index and index-1.
return (pairs[index-1].value + pairs[index].value)/2;

当然代码不是最好的,但你明白了:使用 List,对其进行排序,然后进行 BinarySearch。

查找 MSDN 以获取更多信息。

列表:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

列表.排序:http://msdn.microsoft.com/en-us/library/3da4abas.aspx

List.BinarySearch:http://msdn.microsoft.com/en-us/library/3f90y839.aspx

关于c# - 在集合中查找日期最近的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com