gpt4 book ai didi

arrays - Ruby:哈希数组 - 如何根据作为数组的哈希键删除重复项

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:30 24 4
gpt4 key购买 nike

我有一个散列数组,其中每个散列的键是一个包含 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}]

它不是那么简单。

最佳答案

只要您的 kappa 函数为 u,p 生成与为 p,u 生成相同的值,您就可以这样做:

@result = @user_array.each_with_object({ }) do |u, h|
@user_array.each do |p|
next if (u == p)

h[[u, p].sort] ||= kappa(u, p, "ipf")
end
end

这只会填充一次值。如果您想在最后一个值所在的位置执行此操作,请将 ||= 更改为 =

关于arrays - Ruby:哈希数组 - 如何根据作为数组的哈希键删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com