一组(x,y)点的C#数据结构
我不熟悉C#中所有可用的集合,但我想实现一个类来存储数学关系或函数,即一组对(x,y)。大概它会包括一个元组列表或其他一些从.NET构建的集合,但我不确定什么是最好的。一些可能相关的事实:一组(x,y)点的C#数据结构,c#,math,collections,relation,C#,Math,Collections,Relation,我不熟悉C#中所有可用的集合,但我想实现一个类来存储数学关系或函数,即一组对(x,y)。大概它会包括一个元组列表或其他一些从.NET构建的集合,但我不确定什么是最好的。一些可能相关的事实: 上百万双 通常会想查找哪个y与特定的x相匹配 对于我现在知道的所有情况,x都是双重类型 可能需要将y插值到不存在的x 将要提取关系的子集,包括特定范围内x的所有对 有时会希望以xs的顺序遍历对 似乎应该根据以上内容按xs排序 您需要的可能是System.Collections.Generic.SortedLi
您需要的可能是
System.Collections.Generic.SortedList
如果您不断删除和添加项目,a的性能可能会更好。似乎是执行此任务的合适工具
我们可以定义一个IComparable
元素类型,如下所示
struct FunctionPoint : IComparable<FunctionPoint>
{
public double X, Y;
public FunctionPoint(double x)
{
this.X = x;
this.Y = 0;
}
public FunctionPoint(double x, double y)
{
this.X = x;
this.Y = y;
}
public int CompareTo(FunctionPoint other)
{
return X.CompareTo(other.X);
}
}
var function = new SortedSet<FunctionPoint>();
它会不会被分类?您是需要访问很多项目还是一次只访问几个项目?你为什么需要双重精度?你真的需要如此准确的答案吗?我不太清楚你在问什么。您需要一个存储x,y值的元组的类吗?(然后使用字典/列表/您认为合适的任何其他集合)或者您是否正在寻找一种表示给定函数的方法,并且在c#中实现该函数时遇到困难(在这种情况下,存储元组是一个坏主意,但您正在寻找创建一种方法来返回给定x的y值)?对于插值数据集的其他想法(使用javascript作为语言)看到这个详细的答案,本质上实现了装箱或装箱策略:对于上面的问题,不需要显式地将其存储排序,但根据所述的用法,我猜它可能是为了提高效率?对于不同的浮点类型,答案会不同吗?我说的是double,但可能使用float或其他。谢谢,我认为只要效率合理,@Mat我的理解是,
SortedSet
内部使用的是红黑树,这对于这类事情来说是相当有效的。如果您不经常(或根本不经常)进行插入和删除SortedList
可能更合适。
for (int i = 0; i < 100000; i++)
{
var x = 2 * Math.PI * i / 1000000;
var y = Math.Sin(x);
function.Add(new FunctionPoint { X = x, Y = y });
}
var view = function.GetViewBetween(new FunctionPoint(x), new FunctionPoint(x));
if (view.Count > 0)
{
var y = view.Min;
}
var left = function.GetViewBetween(new FunctionPoint(double.NegativeInfinity), new FunctionPoint(x)).Max;
var right = function.GetViewBetween(new FunctionPoint(x), new FunctionPoint(double.PositiveInfinity)).Min;
var y = LinearInterpolate(left, right, x);
var view = function.GetViewBetween(new FunctionPoint(a), new FunctionPoint(b));
foreach (var point in function)
{
}