這里我有兩個不均勻的陣列(陣列的大小不相等),當 arr1 數字在 arr2 中匹配時,我必須附加插入。但是當條件變為假時,零應該只添加一次而不是重復。下面是代碼
arr2 =[ [[27, 28, 29, 30, 31, 1, 2], 5],
[[31, 1, 2, 3, 4, 5, 6], 14],
[[26, 27, 28, 29, 30, 31, 1], 22],
[[28, 29, 30, 31, 1, 2, 3], 31],
[[25, 26, 27, 28, 29, 30, 31], 35],
[[27, 28, 29, 30, 31, 1, 2], 44],
[[29, 30, 31, 0, 0, 0, 0], 53]
]
arr1 = [5, 0, 14, 0, 22, 0, 31, 35, 0, 44, 0, 53]
cc = []
arr1.each do|item_arr1|
arr2.each_with_index do|item_arr2,index|
if item_arr1 == arr2[index][-1]
cc << item_arr2
else
cc << 0
end
end
end
輸出:
[
[ [27, 28, 29, 30, 31, 1, 2], 5 ],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
[ [31, 1, 2, 3, 4, 5, 6], 14 ],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
[ [26, 27, 28, 29, 30, 31, 1], 22 ],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
[ [28, 29, 30, 31, 1, 2, 3], 31 ],
0, 0, 0, 0, 0, 0, 0,
[ [25, 26, 27, 28, 29, 30, 31], 35 ],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
[ [27, 28, 29, 30, 31, 1, 2], 44 ],
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
[ [29, 30, 31, 0, 0, 0, 0], 53 ]
]
預期輸出:
[
[ [27, 28, 29, 30, 31, 1, 2], 5 ], 0,
[ [31, 1, 2, 3, 4, 5, 6], 14 ], 0,
[ [26, 27, 28, 29, 30, 31, 1], 22 ], 0,
[ [28, 29, 30, 31, 1, 2, 3], 31 ],
[ [25, 26, 27, 28, 29, 30, 31], 35 ], 0,
[ [27, 28, 29, 30, 31, 1, 2], 44 ], 0,
[ [29, 30, 31, 0, 0, 0, 0], 53 ]
]
uj5u.com熱心網友回復:
假設數字是唯一的,您可以使用rassoc從以下位置獲取子陣列arr1:
arr1.map { |i| arr2.rassoc(i) || i }
#=> [
# [[27, 28, 29, 30, 31, 1, 2], 5], 0,
# [[31, 1, 2, 3, 4, 5, 6], 14], 0,
# [[26, 27, 28, 29, 30, 31, 1], 22], 0,
# [[28, 29, 30, 31, 1, 2, 3], 31],
# [[25, 26, 27, 28, 29, 30, 31], 35], 0,
# [[27, 28, 29, 30, 31, 1, 2], 44], 0,
# [[29, 30, 31, 0, 0, 0, 0], 53]
# ]
uj5u.com熱心網友回復:
這不是很像 Ruby,但它應該是相對高效的,因為它避免了搜索陣列的需要。
a1 = arr1.size.times.with_object([]) do |i,a|
n = arr1[i]
next if n.zero?
a << (i < arr1.size-1 && arr1[i 1].zero?)
end
#=> [true, true, true, false, true, true, false]
在arr2[i]if a1[i]is之后應該插入一個零true。
arr2.each_with_object([]) do |a2,a|
a << a2
a << 0 if a1.shift
end
#=> [
# [[27, 28, 29, 30, 31, 1, 2], 5], 0,
# [[31, 1, 2, 3, 4, 5, 6], 14], 0,
# [[26, 27, 28, 29, 30, 31, 1], 22], 0,
# [[28, 29, 30, 31, 1, 2, 3], 31],
# [[25, 26, 27, 28, 29, 30, 31], 35], 0,
# [[27, 28, 29, 30, 31, 1, 2], 44], 0,
# [[29, 30, 31, 0, 0, 0, 0], 53]
# ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383468.html
標籤:红宝石
