什么是c#/。网中排序的ruby(1.8.7)类似物?
-
29-09-2019 - |
题
我需要在Ruby(1.8.7)中保存分类哈希的值。哪些数据构造最适合?
解决方案
核心库或标准库中没有任何东西可以符合您的账单。
那里 是, , 然而, 添加红色/黑树实现的功能请求 到Ruby 1.9.3/2.0。
如果您能够强迫用户只使用 Xruby 或者 jruby, ,您可以使用Java的实现之一 java.util.SortedMap<K, V>
如 java.util.TreeMap<K, V>
.
如果您能够强迫用户只使用 ruby.net 或者 铁瑞, ,您可以使用.NET的 System.Collections.Generic.SortedDictionary<TKey, TValue>
.
如果您能够强迫用户只使用MRI或YARV,则可以使用 Ruby/RBTree
图书馆。它可能也可以 卢比尼乌斯 或者 尚未发行的Jruby 1.6. 。请注意,野外似乎有多个独立的更新叉。这并不明显,其中之一是最新和/或最好的维护。
这 只要 解决方案我知道哪些是可移植的,是 Kanwei Li的算法和容器GSOC 2008项目, ,实际上包含两个分类的键指标集合的实现: Containers::RBTreeMap
基于红色/黑树 和 Containers::SplayTreeMap
基于张开树.
其他提示
如果没有其他人有更好的建议,您可能必须自己滚动。
class SortedHash
def initialize
@data = []
end
def [](k)
@data.find {|kp,vp| kp == k}.last
end
def []=(k, v)
@data.reject! {|kp,vp| kp == k}
@data << [k, v]
@data = @data.sort_by {|kp,vp| kp}
end
def each(&b)
@data.each(&b)
end
end
sh = SortedHash.new
sh[32] = "no"
sh[1] = "later"
sh[99] = "after"
sh.each do |k,v|
p [k,v]
end
输出:
[1, "later"]
[32, "no"]
[99, "after"]
数组用键对数目进行排序,因此它们可以是任何调用,您只需要在其上定义比较操作员即可。
在C#SortedDictionary中使用同一类:
sortedDictionary keyValues = new sortedDictionary();
keyValues.Add(5,"sample5");
keyValues.Add(2, "sample2");
keyValues.Add(6, "sample6");
keyValues.Add(8, "sample8");
keyValues.Add(9, "sample9");
keyValues.Add(1, "sample1");
不隶属于 StackOverflow