我在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);
是否可以在O(log2n)时间内添加所有这些元素?添加此内容之后,我想要我的列表。排序后不会被迫重新排序。
(0,2)
(1,2)
(2,7)
(3,5)
(9,10)
(14,2)
然后我想检查一下,有一个物体(x == 9)。那可能在O(log2n)时间吗?
由于
答案 0 :(得分: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) },
}
如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.
}
当然你可以存储两个int
s
var list = new SortedList<int, int>
{
{ 1, 2 },
{ 3, 5 },
{ 0, 2 },
{ 2, 7 },
{ 14, 2 },
{ 10, 10 },
}
你可以像这样使用
int yValue;
if (list.TryGetValue(3, out yValue))
{
var x3Point = new Point(3, yValue);
}
理想情况下,您可以使用预先排序的数据初始化列表。
答案 1 :(得分:1)
直接来自MSDN:
表示按键排序的键/值对的集合 并且可以通过密钥和索引访问。
因此,当然,如果必须保持其值始终按特定条件排序,则它是一种有用的List类型。请查看this link以获取更多示例和解释!
答案 2 :(得分:1)
您可以通过LINQ映射查询创建SortedList。实例如下。请注意,SortedList基本上是带有键值项的已排序哈希表(SortedList
实现IDictionary
)。所以我从int数组中选择相等的键和值。
var ints = new []{1,54,65,76,34,36};
SortedList sorted = new SortedList(ints.ToDictionary(key => key, val => val));