【发布时间】:2016-09-15 18:03:52
【问题描述】:
我有一个哈希数组,其中每个哈希的键是和包含 2 个整数的数组 - 看起来像这样:
[{[6, 8]=>0.5932190854209105}, {[6, 13]=>0.7183325285691291}, {[6, 15]=>0.8253727388780498}, {[8, 6]=>0.5932190854209105}, {[8, 13]=>0.7255537819950661}, {[8, 15]=>0.5249232568337963}, {[13, 6]=>0.7183325285691291}, {[13, 8]=>0.7255537819950661}, {[13, 15]=>0.6348636166265346}, {[15, 6]=>0.8253727388780497}, {[15, 8]=>0.5249232568337963}, {[15, 13]=>0.6348636166265343}]
我需要删除重复项 - 在这种情况下,重复项被定义为其键已经存在(但顺序相反)的哈希。例如 [6, 15] 和 [15,6]。您可以看到,根据这个定义,其中一半是重复的。
只是补充一下:
这是由以下组成的
@user_array.each do |u|
@result << @user_array.map { |p| Hash[[u, p] => kappa(u, p, "ipf")] if p !=u }
end
user_array 是一个整数数组(用户 ID)。例如:
[6, 8, 13, 15]
我需要对每个无序配对组合运行 kappa 助手。我似乎可以弄清楚如何防止它“加倍”。我想如果我能以某种方式保存这对,那么我可以进行比较。我知道如何做到这一点的唯一方法是使用哈希。我相当新。
编辑:我试过这样排序:
@user_array.each do |u|
@result << @user_array.map { |p| Hash[[u, p].sort => kappa(u, p, "ipf")] if p !=u }
end
但它们是离散的散列......所以它不起作用:
[{[6, 8]=>0.5932190854209105}, {[6, 13]=>0.7183325285691291}, {[6, 15]=>0.8253727388780498}, {[6, 8]=>0.5932190854209105}, {[8, 13]=>0.7255537819950661}, {[8, 15]=>0.5249232568337963}, {[6, 13]=>0.7183325285691291}, {[8, 13]=>0.7255537819950661}, {[13, 15]=>0.6348636166265346}, {[6, 15]=>0.8253727388780497}, {[8, 15]=>0.5249232568337963}, {[13, 15]=>0.6348636166265343}]
它不是那么简单。
【问题讨论】:
-
我不确定我是否同意您对“重复”的定义。键是数组中包含的对;否则,哈希功能将能够“照顾”他们的条目,而无需您干预。你是如何插入钥匙的?
-
我想我知道你在说什么......但它们是离散的散列,彼此了解
-
你能举出更多例子吗?
-
该解决方案非常混乱,并产生了惊人数量的垃圾。
-
好的。据我所知,你能解释一下最后的评论吗?