如何将ruby哈希对象转换为JSON?所以我在下面尝试这个例子它不起作用?
我在看RubyDoc,显然Hash对象没有to_json方法.但我正在阅读Rails支持active_record.to_json并支持的博客hash#to_json.我可以理解ActiveRecord是一个Rails对象,但Hash它不是Rails本机的,它是一个纯Ruby对象.所以在Rails中你可以做一个hash.to_json,但不是纯粹的Ruby?
car = {:make => "bmw", :year => "2003"}
car.to_json
Run Code Online (Sandbox Code Playgroud) 我在一个程序中得到这个错误,该程序创建了几个(几十万个)HashMap对象,每个对象有几个(15-20)个文本条目.在提交到数据库之前,必须收集这些字符串(不会分解成较小的数量).
根据Sun的说法,如果在垃圾收集中花费了太多时间,则会发生错误:如果超过98%的总时间花在垃圾收集上,并且不到2%的堆被恢复,则会抛出OutOfMemoryError. ".
显然,可以使用命令行将参数传递给JVM
第一种方法工作正常,第二种方法在另一个java.lang.OutOfMemoryError中结束,这次是关于堆的.
所以,问题:对于特定的用例(即几个小的HashMap对象),是否有任何编程替代方案?例如,如果我使用HashMap clear()方法,问题就会消失,但HashMap中存储的数据也会消失!:-)
StackOverflow中的相关主题也讨论了该问题.
是否总是需要在HashMap中检查密钥是否存在?
我有一个HashMap,说1000条目,我正在寻求提高效率.如果非常频繁地访问HashMap,那么在每次访问时检查密钥是否存在将导致很大的开销.相反,如果密钥不存在并因此发生异常,我可以捕获异常.(当我知道这种情况很少发生时).这将减少对HashMap的访问一半.
这可能不是一个好的编程习惯,但它会帮助我减少访问次数.或者我在这里遗漏了什么?
[ 更新 ]我在HashMap中没有空值.
我正在从服务器请求数据,该服务器以JSON格式返回数据.在发出请求时将HashMap转换为JSON并不难,但另一方面似乎有点棘手.JSON响应如下所示:
{
"header" : {
"alerts" : [
{
"AlertID" : "2",
"TSExpires" : null,
"Target" : "1",
"Text" : "woot",
"Type" : "1"
},
{
"AlertID" : "3",
"TSExpires" : null,
"Target" : "1",
"Text" : "woot",
"Type" : "1"
}
],
"session" : "0bc8d0835f93ac3ebbf11560b2c5be9a"
},
"result" : "4be26bc400d3c"
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是访问这些数据?我正在使用GSON模块.
如果我通过相同的密钥多次HashMap的put方法,会发生什么原始值?如果价值重复怎么办?我没有找到任何关于此的文件.
案例1:密钥的覆盖值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了surely not one.
案例2:重复值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了one.
但是其他价值观会发生什么?我正在向学生教授基础知识,我被问到这个问题.是Map一个桶,其中引用了最后一个值(但在内存中)?
这是排序哈希并返回哈希对象(而不是数组)的最佳方法:
h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
# => {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
Hash[h.sort]
# => {"a"=>1, "b"=>2, "c"=>3, "d"=>4}
Run Code Online (Sandbox Code Playgroud) 什么是(最快/最干净/直接)的方式将哈希中的所有键从字符串转换为符号?
解析YAML时这很方便.
my_hash = YAML.load_file('yml')
Run Code Online (Sandbox Code Playgroud)
我希望能够使用:
my_hash[:key]
Run Code Online (Sandbox Code Playgroud)
而不是:
my_hash['key']
Run Code Online (Sandbox Code Playgroud) 我有两个HashMap对象定义如下:
HashMap<String, Integer> map1 = new HashMap<String, Integer>();
HashMap<String, Integer> map2 = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)
我还有第三个HashMap对象:
HashMap<String, Integer> map3;
Run Code Online (Sandbox Code Playgroud)
我该如何合并map1,并map2汇集成map3?
用例
用例是基于提供的字符串或函数将对象数组转换为哈希映射,以评估和使用hashmap中的键作为对象本身的值.使用它的常见情况是将对象数组转换为对象的哈希映射.
码
以下是javascript中的小片段,用于将对象数组转换为哈希映射,由对象的属性值索引.您可以提供一个动态(运行时)评估哈希映射键的函数.希望这有助于将来的任何人.
function isFunction(func){
return Object.prototype.toString.call(func) === '[object Function]';
}
/**
* This function converts an array to hash map
* @param {String | function} key describes the key to be evaluated in each object to use as key for hasmap
* @returns Object
* @Example
* [{id:123, name:'naveen'}, {id:345, name:"kumar"}].toHashMap("id")
* Returns :- Object {123: Object, 345: Object}
*
* [{id:123, name:'naveen'}, {id:345, name:"kumar"}].toHashMap(function(obj){return obj.id+1})
* Returns :- Object {124: Object, 346: Object}
*/
Array.prototype.toHashMap = function(key){ …Run Code Online (Sandbox Code Playgroud) hashmap ×10
java ×6
ruby ×3
json ×2
arrays ×1
c# ×1
dictionary ×1
g1gc ×1
gson ×1
hashtable ×1
heap ×1
heap-memory ×1
javascript ×1
sorting ×1