如何从Ruby中的给定数组中删除重复的对值?

时间:2019-05-14 13:39:05

标签: ruby

我想从字符串数组中删除一对“重复项”,其中每个元素的形式为R1,R2,数字不同。在我的情况下,重复项将是R2,R1,因为它具有与R1,R2相同的元素,但倒置了。

给出:

a = ['R1,R2', 'R3,R4', 'R2,R1', 'R5,R6']

结果数组应如下所示:

a = ['R1,R2', 'R3,R4', 'R5,R6']

如何删除重复项,以便获得以下内容?

4 个答案:

答案 0 :(得分:5)

使用Set

的解决方案
require 'set' 

a.uniq { |item| Set.new(item.split(",")) }  # => ["R1,R2", "R3,R4", "R5,R6"]

答案 1 :(得分:4)

这是一个可行的示例:

array = ['R1,R2', 'R3,R4', 'R2,R1', 'R5,R6']

array.uniq { |a| a.split(',').sort }

答案 2 :(得分:0)

尝试一下

return Container(
       width: MediaQuery.of(context).size.width * 0.8,
       height: MediaQuery.of(context).size.height * 0.8,

参考:https://www.rosettacode.org/wiki/Remove_duplicate_elements#Ruby

答案 3 :(得分:0)

如果数组中的元素是“成对”,则它们应该是 actual 对而不是字符串,例如:

pairs = [['R1', 'R2'], ['R3', 'R4'], ['R2', 'R1'], ['R5', 'R6']]

而且,实际上,由于顺序似乎无关紧要,因此看来应该真正设置它们:

require 'set'

sets = [Set['R1', 'R2'], Set['R3', 'R4'], Set['R2', 'R1'], Set['R5', 'R6']]

如果是这种情况,那么Array#uniq将会按预期工作:

sets.uniq
#=> [#<Set: {"R1", "R2"}>, #<Set: {"R3", "R4"}>, #<Set: {"R5", "R6"}>]

因此,最好的方法是更改​​产生该值的代码以返回包含两个元素的数组。

如果这不可能,那么您应该在进入系统时在系统边界处转换值,如下所示:

sets = a.map {|el| el.split(',') }.map(&Set.method(:new))