对于不太明确的问题感到抱歉,但我无法找到更好的询问方式......
我有一个数组
a=[[1,2], [3,4], [4,2], [2,1]]
我想找到具有重复元素的子数组,在本例中为[1,2]和[4,2]
我想将重复的元素添加到一起并创建一个新条目并删除2个原始子数组。
结果...
a=[[5,2], [3,4], [2,1]]
这可能吗?
编辑:添加了一些代码和更多关于我试图完成的内容的详细信息
我对编程非常陌生,喜欢挑战自己,所以我尝试编写一个二维垃圾箱算法来为厨柜创建切片......我是一个橱柜制造商。
这是我到目前为止所提出的......我所问的是在split_sheet方法中。基本上在某些情况下,我想要组合具有相同宽度或相同长度的剩余空片段。可能会有更多情况需要类似的东西但到目前为止我已经找到了所有类似的东西。
我尝试使用地图,但我无法使用地图,因此我正在做的是将新的工作表部分与现有部分进行比较,看看我是否找到匹配。
def cut_sheet_layout_algorithm#(length, width)
sort_by_length_width=@cabinet_cut_sheet.sort{|a,b| [b[3], b[2]]<=>[a[3], a[2]]} # sort by length then width
parts_group_by_thickness=sort_by_length_width.group_by{|thickness| thickness[1]}.values # group by thickness
def create_sheet(length, width, thick)#, @new_sheet, sheet_full) # Creates sheet
@sheet=[]; @sheet_free_space=[]; @sheet_coords=[]; @new_sheet=false; sheet_full=false
@sheet.push(length, width, thick)
@sheet_free_space.push([length, width])
end
def split_sheet(section_number, sheet_section, part_dimensions)
if part_dimensions[0]<=sheet_section[0] && part_dimensions[1]<=sheet_section[1]
new_section_a_width=sheet_section[0]-part_dimensions[0]
new_section_b_length=sheet_section[1]-part_dimensions[1]
new_section_a_dimensions=[part_dimensions[0], new_section_b_length]
new_section_b_dimensions=[new_section_a_width, sheet_section[1]]
@sheet_free_space.delete_at(section_number)
@section_a_combined=@section_b_combined=false
@sheet_free_space.each{|section|
@section_a_0=new_section_a_dimensions[0]==section[0]
@section_a_1=new_section_a_dimensions[1]==section[1]
@section_b_0=new_section_b_dimensions[0]==section[0]
@section_b_1=new_section_b_dimensions[1]==section[1]
if @section_a_1==true || @section_b_1==true
section[0]=new_section_a_dimensions[0]+section[0]
@section_a_combined=true
end
if @section_a_0==true || @section_b_0==true
section[1]=new_section_a_dimensions[1]+section[1]
@section_b_combined=true
end
}
@sheet_free_space << new_section_a_dimensions if new_section_b_length!=0 && @section_a_combined==false
@sheet_free_space << new_section_b_dimensions if new_section_a_width!=0 && @section_b_combined==false
end
end
def does_part_fit(part_dimensions)
section_number=0
@sheet_free_space.each{|section|
if part_dimensions[0]<=section[0] && part_dimensions[1]<=section[1]
@part_fits=true
sheet_section=@sheet_free_space[section_number]
split_sheet(section_number, sheet_section, part_dimensions)
break
else
@part_fits=false
end
section_number+=1
}
end
parts_group_by_thickness.each{|grouped_by_thickness| # iterate groups to create cut sheet lists according to sheet thickness
sheet_thick=grouped_by_thickness[0][1]
@new_sheet=true # variable to check if new sheet , used to determine startx and starty
number_of_parts=grouped_by_thickness.length
grouped_by_thickness.delete_if do |part| # iterate parts of each sheet thickness group
create_sheet(@sheet_size_length, @sheet_size_width, sheet_thick) if @new_sheet==true # create new sheet only if preceeding sheet is full
part_dimensions=[part_length=part[2].to_l+@blade_kerf, part_width=part[3].to_l+@blade_kerf]
does_part_fit(part_dimensions)
if @part_fits==true # delete part if placed
true
else
@new_sheet=true # variable to check if new sheet , used to determine startx and starty
false
end
end
}
end # end cut_sheet_layout_algorithm
随意批评我的代码,这是我的学习方式。
答案 0 :(得分:3)
这是一件非常棘手的事情,但是Enumerable
你可以使用很多工具帮助破解它。
这是一种方法:
beaconpoc@cqlsh:test> describe TYPES;
list[i] not a string for i in 0
答案 1 :(得分:0)
我不确定我是否理解您的问题,但以下代码比较了两个数组并删除了重复数据。
a=[[1], [2], [3], [4]]
b=[[1], [3]]
c = a - b
puts c
所以你想要做类似的事情。