반응형
배열 Ruby에서 요소 제거
array에서 요소를 제거하려고한다고 가정 해 보겠습니다 a = [1,1,1,2,2,3]
. 다음을 수행하는 경우 :
b = a - [1,3]
그런 다음 얻을 것입니다.
b = [2,2]
그러나 결과는
b = [1,1,2,2]
즉, 모든 경우가 아닌 뺀 벡터에서 각 요소의 인스턴스를 하나만 제거합니다. Ruby에서이를 수행하는 간단한 방법이 있습니까?
다음을 수행 할 수 있습니다.
a= [1,1,1,2,2,3]
delete_list = [1,3]
delete_list.each do |del|
a.delete_at(a.index(del))
end
결과 : [1, 1, 2, 2]
[1,3].inject([1,1,1,2,2,3]) do |memo,element|
memo.tap do |memo|
i = memo.find_index(e)
memo.delete_at(i) if i
end
end
간단하지는 않지만 :
a = [1,1,1,2,2,3]
b = a.group_by {|n| n}.each {|k,v| v.pop [1,3].count(k)}.values.flatten
=> [1, 1, 2, 2]
또한 'subtrahend'에서 배수의 경우를 처리합니다.
a = [1,1,1,2,2,3]
b = a.group_by {|n| n}.each {|k,v| v.pop [1,1,3].count(k)}.values.flatten
=> [1, 2, 2]
편집 : 이것은 "기능적"솔루션을 만들기 위해 Norm212와 내 대답을 결합한 개선 사항입니다.
b = [1,1,3].each.with_object( a ) { |del| a.delete_at( a.index( del ) ) }
필요한 경우 람다에 넣으십시오.
subtract = lambda do |minuend, subtrahend|
subtrahend.each.with_object( minuend ) { |del| minuend.delete_at( minuend.index( del ) ) }
end
그때:
subtract.call a, [1,1,3]
a = [1,1,1,2,2,3]
a.slice!(0) # remove first index
a.slice!(-1) # remove last index
# a = [1,1,2,2] as desired
자주 사용하는 간단한 솔루션 :
arr = ['remove me',3,4,2,45]
arr[1..-1]
=> [3,4,2,45]
속도를 위해 다음을 수행합니다. 두 배열을 각각 한 번만 통과하면됩니다. 이 방법은 순서를 유지합니다. 먼저 원래 배열을 변경하지 않는 코드를 제시 한 다음 쉽게 변경하여 변경하는 방법을 보여줍니다.
arr = [1,1,1,2,2,3,1]
removals = [1,3,1]
h = removals.group_by(&:itself).transform_values(&:size)
#=> {1=>2, 3=>1}
arr.each_with_object([]) { |n,a|
h.key?(n) && h[n] > 0 ? (h[n] -= 1) : a << n }
#=> [1, 2, 2, 1]
arr
#=> [1, 1, 1, 2, 2, 3, 1]
To mutate arr
write:
h = removals.group_by(&:itself).transform_values(&:count)
arr.replace(arr.each_with_object([]) { |n,a|
h.key?(n) && h[n] > 0 ? (h[n] -= 1) : a << n })
#=> [1, 2, 2, 1]
arr
#=> [1, 2, 2, 1]
This uses the 21st century method Hash#transform_values (new in MRI v2.4), but one could instead write:
h = Hash[removals.group_by(&:itself).map { |k,v| [k,v.size] }]
or
h = removals.each_with_object(Hash.new(0)) { | n,h| h[n] += 1 }
참고URL : https://stackoverflow.com/questions/8929053/removing-elements-from-array-ruby
반응형
'programing' 카테고리의 다른 글
Google 테스트는 C 코드를 테스트해도 괜찮습니까? (0) | 2020.12.05 |
---|---|
IE7에서 Google +1 버튼이 작동하지 않나요? (0) | 2020.12.05 |
Linux cron 작업은 백그라운드에서 실행됨을 나타 내기 위해 "&"로 지정해야합니까? (0) | 2020.12.05 |
마스터에 병합 할 때 첫 번째 분기가 스쿼시 된 후 분기의 분기 병합 (0) | 2020.12.05 |
PHP에서 정규식 컴파일 (0) | 2020.12.05 |