我需要一个Ruby中的数据结构,在添加或删除元素时保持其元素排序,并允许(至少)能够从列表中弹出第一个元素。我在ruby文档中找到的最接近的是SortedSet.但是,这似乎没有提供任何方式来通过索引访问元素(甚至弹出第一个元素)这些是我需要的具体操作:将对象添加到列表从列表中弹出第一个对象检查一个对象是否在列表中从列表中删除对象(按对象,而不是按索引)ruby是否为此内置了任何东西,或者是否有任何我可以获取的库可以提供给我?我可以毫不费力地实现一个,但如果可能的话,我宁愿使用一个已经存在的。目前我使用的是Ruby1.8,但切换到1.9可能没问题。编辑:由于似乎有些困惑,我需要的排
所以我正在查看SortedList的实现和执行Add(调用Insert如下所示)真的让我感到惊讶。Add方法进行明显的二进制搜索以确定KVP应该去的索引,但是Insert似乎它可以显着改进(当然是在更大的范围内):privatevoidInsert(intindex,TKeykey,TValuevalue){if(this._size==this.keys.Length)this.EnsureCapacity(this._size+1);if(index如果我没看错,我保留随时犯错的权利,这是一个O(2n)操作。在我看来,值应该用指针来实现。有点像LinkedList与key的值有关,
如果我有一个SortedList我想退回一个新的IEnumerable该类的属性我该怎么做?我试过了SortedList.Select(x=>x.MyProperty,x.AnotherProperty)但它不起作用。谢谢。 最佳答案 你可以返回一个匿名对象:varresult=SortedList.Select(x=>new{x.Value.MyProperty,x.Value.AnotherProperty});或者如果你想在当前方法的范围之外使用结果,你可以定义一个自定义类型:IEnumerableresult=SortedL
如何让C#中的Linq返回SortedList给定一个IEnumerable?如果不能,是否可以将IEnumerable强制转换或转换为SortedList? 最佳答案 最简单的方法可能是使用ToDictionary创建字典,然后调用SortedList(dictionary)构造函数。或者,添加您自己的扩展方法:publicstaticSortedListToSortedList(thisIEnumerablesource,FunckeySelector,FuncvalueSelector){//Argumentcheckseli
我想知道如何获取C#排序列表中的下一个元素。到目前为止,我想出了以下代码:SortedListmList;BlasomeElement=mList[key];Blanext=mList[mList.Keys[mList.IndexOfKey(key)+1]];我不确定这是否是最明智的做法;-) 最佳答案 因为您可以通过index(seetheRemarkssection)访问SortedList,我建议使用以下内容:varindex=mList.IndexOfKey(key);varfirst=mList.Values[index]
Reflector告诉我SortedList使用了一个ThrowHelper类来抛出异常,而不是直接抛出异常,例如:publicTValuethis[TKeykey]{get{intindex=this.IndexOfKey(key);if(index>=0)returnthis.values[index];ThrowHelper.ThrowKeyNotFoundException();returndefault(TValue);}ThrowKeyNotFoundException只做以下事情:thrownewKeyNotFoundException();请注意,这需要一个无法访问的d
我有一个已排序的对象集合(它可以是SortedList或SortedDictionary,我主要将其用于阅读,因此增加性能并不那么重要)。我怎样才能得到第i个值?例如当我在集合中有数字1、2、3、4、5并且我想要中位数(在本例中为3)时,我该怎么做? 最佳答案 你可以使用如下代码list.Values[index]用于排序列表。使用SortedDictonary的最简单方法是使用ElementAt()方法:dict.ElementAt(index).Value但是,这比列表情况慢。无论哪种情况,您都需要检查您的计数。如果是奇数,取i
我需要为线性插值编写一些代码,我正在尝试找出搜索SortedList的键的最有效方法。对于围绕我的目标键的上下键。SortedListxyTable=newSortedList(){{1,10},{2,20},{3,30},{4,40}};doubletargetX=3.5;搜索列表并确定3.5在3和4之间的最有效方法是什么?我有一个适用于整数的方法/作弊(暂时将目标键插入列表然后找到索引)但我想我会问专业人士以便我可以生成高质量的代码。谢谢。 最佳答案 二分查找可以让你在列表中获得不错的性能。但是SortedList的Keys属性
将List转换为SortedList的最佳方法是什么?没有循环通过它的任何好方法吗?使用OrderBy()有什么聪明的方法吗?总结请阅读所有答案和评论。 最佳答案 你的意思是:你有一个List并希望它就地分类?你有一个List并希望创建另一个本身已排序的“列表”你有一个List并希望制作一个SortedList其中键与值相同假设输入:varx=newList(){3,2,1};1是微不足道的x.Sort();2是微不足道的//sxisanIOrderedEnumerable,youcancallToList()onitifyouwa
我有一个SortedList形式的时间序列.我想计算这个系列的移动平均值。我可以使用简单的for循环来做到这一点。我想知道是否有更好的方法使用linq来执行此操作。我的版本:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){varmySeries=newSortedList();mySeries.Add(newDateTime(2011,01