我读到Haskell中的哈希表存在性能问题(2006 年的Haskell-Cafe和2009年的Flying Frog Consultancy的博客),因为我喜欢Haskell,所以我很担心.
那是一年前,现在的状况是什么(2010年6月)?GHC中是否修复了"哈希表问题"?
C#是否允许在单行表达式中填充哈希表?我正在考虑与以下Python相当的东西:
mydict = {"a": 23, "b": 45, "c": 67, "d": 89}
Run Code Online (Sandbox Code Playgroud)
换句话说,是否可以在单独的表达式中设置每个键值对?
如果我有一个每个元素的键并且我不知道元素的索引到数组中,则哈希表比数组(O(1)vs O(n))表现更好.
这是为什么?我的意思是:我有一个密钥,我哈希它...我有哈希..算法不应该比较这个哈希与每个元素的哈希?我觉得记忆性格背后有一些技巧,不是吗?
据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).
我有两个问题:
它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?
我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable?
有人可以解释两种实现之间的主要区别(优点/缺点)吗?
对于库,建议使用什么实现?
我正在编写有很多表查找的程序.因此,我仔细阅读Haskell的文档时,我偶然发现了Data.Map(当然),但也Data.HashMap和Data.Hashtable.我不是哈希算法的专家,在检查包之后,它们看起来都非常相似.因此我想知道:
1:如果有什么主要差异?
2:在大约4000个键值对的地图/表上进行大量查找,哪个性能最高?
我正在尝试使用哈希表,以便我可以选择存储在数组/对象中的特定对象.但是,我在循环对象时遇到问题.
var pins= {};
pins[6] = '6';
pins[7] = '7';
pins[8] = '8';
$('#result3').append('<div>Size: ' + Object.size(pins) + '</div>');
for(var i = 0; i < Object.size(pins); i++) {
$('#result3').append('<div>' + pins[i] + '</div>');
}
Run Code Online (Sandbox Code Playgroud)
JSFiddle:http://jsfiddle.net/7TrSU/
正如您所看到的那样TEST 3,使用object pin来存储数据,我undefined在循环访问对象时得到了pin.
循环的正确方法是pin什么?
编辑
如果不是pin[6] = '6',我会使pin [6] =一个对象并且我想循环遍历它们的所有id属性会发生什么?我正在做的实际代码片段......
for(var i = 0; i < json.length; i++) {
markerId = json[i].listing_id
// Place markers on map
var …Run Code Online (Sandbox Code Playgroud) 我需要某种方式来存储键/值对,其中值可以是不同类型.
所以我喜欢这样做:
int i = 12;
string s = "test";
double x = 24.1;
Storage.Add("age", i);
Storage.Add("name", s);
Storage.Add("bmi", x);
Run Code Online (Sandbox Code Playgroud)
然后用以下方法检索值:
int a = Storage.Get("age");
string b = Storage.Get("name");
double c = Storage.Get("bmi");
Run Code Online (Sandbox Code Playgroud)
这样的存储应该如何?谢谢,Erik
myTable = {}
myTable["foo"] = 12
myTable["bar"] = "blah"
print(#myTable) -- this prints 0
Run Code Online (Sandbox Code Playgroud)
我是否真的必须遍历表中的项目才能获得密钥数量?
numItems = 0
for k,v in pairs(myTable) do
numItems = numItems + 1
end
print(numItems) -- this prints 2
Run Code Online (Sandbox Code Playgroud) hashtable ×10
c ×2
c# ×2
hashmap ×2
haskell ×2
algorithm ×1
collections ×1
dictionary ×1
ghc ×1
hash ×1
java ×1
javascript ×1
lua ×1
performance ×1