我不明白为什么,但是当我嵌套这两个循环时,我得到了太多的插入和匹配。任何帮助表示赞赏!
伪代码 两个数组 - 嵌套for循环 搜索第二个数组以匹配第一个数组中的每个元素 如果第二个数组中有匹配,请在匹配后取数字 在匹配的单词之后在第一个数组中插入数字 端
问题代码:
ary1 = ['a','b','c','d']
ary2 = ['e','f','g', 'a']
limit = ary1.count - 1
limit2 = ary2.count - 1
(0..limit).each do |i|
(0..limit2).each do |j|
if ary1[i] == ary2[j]
ary1.insert(i,ary2[j])
puts 'match!'
end
end
end
puts ary1
输出: 比赛! 比赛! 比赛! 比赛! 一个 一个 一个 一个 一个 b C d
临时解决方案:
ary1 = ['a','b','c','d']
ary2 = ['e','f','g', 'a']
# have to make a copy to avoid excessive matches
ary_dup = Array.new(ary1)
limit = ary1.count - 1
limit2 = ary2.count - 1
(0..limit).each do |i|
(0..limit2).each do |j|
if ary1[i] == ary2[j]
ary_dup.insert(i,ary2[j])
puts 'match!'
end
end
end
puts ary_dup
输出: 比赛! 一个 一个 b C d
答案 0 :(得分:1)
它正在发生,因为你正在修改数组(ary1)。
您可以使用以下代码行获得所需的结果 -
(ary1 & ary2).each {|e| ary1.insert(ary1.index(e)+1,e)}
它的作用是什么 -
ary1 & ary2
返回一个数组,它是两个数组的交集 - ary1和ary2。换句话说,它将包含两个数组中存在的所有元素。
.each
并且随后的块遍历这个新数组,并在"index of original element" + 1
puts ary1 #=> ["a", "a", "b", "c", "d"]
答案 1 :(得分:0)
以下部分不相符:
(0..limit).each do |i|
(0..limit2).each do |j|
if ary1[i] == ary2[j]
ary1.insert(i,ary2[j])
puts 'match!'
end
end
end
第一关:
ary1 = ['a','b','c','d']
ary2 = ['e','f','g', 'a']
当limit=0
和limit2 = 3
时,匹配。ary1.insert(0,ary2[j])
行会使您的数组ary1
为ary1 = ['a','a','b','c','d']
第二遍:
ary1 = ['a','a',b','c','d']
ary2 = ['e','f','g', 'a']
当limit=1
和limit2 = 3
时,匹配。ary1.insert(1,ary2[j])
行会使您的数组ary1
为ary1 = ['a','a','a','b','c','d']
。
它继续......所以当arr1
的大小 4 时,a
已添加到ary1
。最后它变成了 - [ a,a,a,a,a,b,c,d]
。
Array#insert
说: -
在具有给定索引的元素之前插入给定值。负数索引从数组末尾向后计数,其中-1是最后一个元素。