我想从字符串数组中删除一对“重复项”,其中每个元素的形式为R1,R2
,数字不同。在我的情况下,重复项将是R2,R1
,因为它具有与R1,R2
相同的元素,但倒置了。
给出:
a = ['R1,R2', 'R3,R4', 'R2,R1', 'R5,R6']
结果数组应如下所示:
a = ['R1,R2', 'R3,R4', 'R5,R6']
如何删除重复项,以便获得以下内容?
答案 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))