방법을, 감사하겠습니다
이 그 일의 짧은 가지가 있지만 명확성을 위해 촬영 전 함께했다 이 :
products = {124 => ['shoes', 59.99], 352 => ['shirt', 19.99], 777 => ['pants', 19.87],
667 => ['jacket', 39.99], 898 => ['shoulder_holster', 22.78]}
def wipeProduct(hash, nameToDelete)
hash.each do |i|
key = i[0]
productName = i[1].first
hash.delete(key) if productName==nameToDelete
end
end
puts products.inspect
wipeProduct(products,'pants')
puts products.inspect
wipeProduct(products,'shoulder_holster')
puts products.inspect
bash-3.2$ ruby prod.rb
{352=>["shirt", 19.99], 898=>["shoulder_holster", 22.78], 667=>["jacket", 39.99], 777=>["pants", 19.87], 124=>["shoes", 59.99]}
{352=>["shirt", 19.99], 898=>["shoulder_holster", 22.78], 667=>["jacket", 39.99], 124=>["shoes", 59.99]}
{352=>["shirt", 19.99], 667=>["jacket", 39.99], 124=>["shoes", 59.99]}
내가 여러 장소에서 해시에서 발생하는 "바지"에 대한 가능성이 있는지 알고,하지만 난 "hash.each (...)", 방법 wipeProduct (해시를 사용 이후하지 않습니다 , nameToDelete) 이제까지 시험 할 것이다 y 해시 항목.
입력 유형의 버그가
당신이 입력을, 당신은 당신이 D로 촬영 된 문자열을 할당하고 해결하는 방법에 대해 설명합니다. 여기 증거는 다음과 같습니다
irb(main):010:0> d = gets.to_s
12
=> "12\n"
irb(main):011:0> d.class
=> String
이 같은 Fixnum이라는 해당 문자열을 변환 할 수 있습니다 : 제품 해시에서
irb(main):012:0> d.to_i
=> 12
irb(main):013:0> d.to_i.class
=> Fixnum
모든 키는 Fixnums 있습니다.
irb(main):014:0> products.keys.each {|i| puts i.class}
Fixnum
Fixnum
Fixnum
Fixnum
Fixnum
=> [352, 898, 667, 777, 124]
그래서이 줄 인수에 대한 값을 캡처해야합니다 : 여기 증거입니다
d = gets.to_i # Get value for argument
대답을 삭제 부분 : 제품에서
, 당신이 할 수있는 다음과 같이 바지 항목을 프로그래밍 방식으로 삭제하십시오.
products.delete (777)
는 당신이 얻을 실행이 :
당신이 (.delete하기) (이 경우 777에서) 키 값을 제공하고 각각 순서대로 키와 값으로 구성된 배열을 반환
irb(main):003:0> products.delete(777)
=> ["pants", 19.87]
공지 사항 .
대안 구현
난 그게 해시의 키 - 값 쌍의 반복이야 블록에 해시를 변경하는 것이 안전 있는지 확실하지 않습니다. 그렇지 않으면, 당신은 단지 삭제 될 모든 키를 저장하고 해시 반복 한 후 삭제할 수 있습니다 : 당신에게 '바지'와 일치하는 기록을 얻을 것이다
def wipeProduct(hash, nameToDelete)
keysToDelete = []
hash.each do |i|
key = i[0]
productName = i[1].first
keysToDelete << key if productName==nameToDelete
end
keysToDelete.each {|key| hash.delete(key) }
end
btw 모든 정보 담당자가 머리를 꺼내는 데 도움이됩니다. – Matt