如何制作和使用排序的对象列表(包含2个整数,列表应按其中一个排序)

Pat*_*ryk 2 c# sorting list

我在visual studio(c#)中看到过像SortedList这样的东西.但是,我不知道它是如何工作的以及如何使用它.我想使用SortedList,因为我希望它的访问时间比普通列表快.不幸的是,我不能使用数组.我很高兴看到一些简单的例子.

编辑:假设有一个对象类:

class Point
{
public Point(int a, int b) {x = a; y = b;}
int x;
int y;
}

// x value will not be repeating in a list
Point a1 = new Point(1,2);
Point a2 = new Point(3,5);
Point a3 = new Point(0,2);
Point a4 = new Point(2,7);
Point a5 = new Point(14,2);
Point a6 = new Point(9,10);

SortedList<Point> list = new SortedList<Point>();

list.Add(a1);
list.Add(a2);
list.Add(a3);
list.Add(a4);
list.Add(a5);
list.Add(a6);
Run Code Online (Sandbox Code Playgroud)

是否可以在O(log2n)时间内添加所有这些元素?添加此内容之后,我想要我的列表.排序后不会被迫重新排序.

(0,2)
(1,2)
(2,7)
(3,5)
(9,10)
(14,2)
Run Code Online (Sandbox Code Playgroud)

然后我想检查一下,有一个对象(x == 9).那可能在O(log2n)时间吗?

谢谢

Jod*_*ell 7

你可以这样做,

var list = new SortedList<int, Point>
{
    { 1, new Point(1, 2) },
    { 3, new Point(3, 5) },
    { 0, new Point(0, 2) },
    { 2, new Point(2, 7) },
    { 14, new Point(14, 2) },
    { 10, new Point(9, 10) },
}
Run Code Online (Sandbox Code Playgroud)

如MSDN所述,内联对象初始化对SortedLists特别有用.

要查看你的x是否为3,你会使用

Point x3Point;
if (list.TryGetValue(3, out x3Point))
{
    //x3Point is now set to the Point with an x value of 3.
}
Run Code Online (Sandbox Code Playgroud)

当然,你可以只存储两个int小号

var list = new SortedList<int, int>
{
    { 1, 2 },
    { 3, 5 },
    { 0, 2 },
    { 2, 7 },
    { 14, 2 },
    { 10, 10 },
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样使用它

int yValue;
if (list.TryGetValue(3, out yValue))
{
    var x3Point = new Point(3, yValue);
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,您使用预排序数据初始化列表.