#Hash
해시란 키와 값으로 이루어진 조합물입니다.
ruby에서는 Hash.new를 이용하여 hash를 생성한 뒤 =>를 사용하여 키에 값을 할당합니다.
my_hash = {"name" => "Kim", "age" => "20, "hungry?" => true"}
puts my_hash["name"]
puts my_hash["age"]
puts my_hash["hungry?"]
1. Hash.new 사용
위의 예시에서는 해시의 리터럴 표기법(literal notation)을 사용하여 해시를 생성했습니다.
또한 Ruby에서는 Hash.new를 이용하여 해시를 생성할 수도 있습니다. 변수에 Hash.new를 할당하면 비어있는 상태의 새로운 해시가 생성됩니다. 이는 변수에 비어있는 중괄호 {} 를 할당하는 것과 똑같습니다.
my_hash = Hash.new
2. 해시에 값 추가하기
두 가지 방법을 통해 해시에 요소들을 추가할 수 있습니다.
리터럴 표기법으로 해시를 생성하였다면 중괄호 안에 직접 키=>값을 추가하면 됩니다.
Hash.new를 사용한다면, 대괄호 표기법을 사용하여 요소를 추가할 수 있습니다.
# Hash.new를 사용하여 해시 생성
animals = Hash.new
animals["dog"] = "cute"
animals["hippo"] = "big"
animals["graffe"] = "long neck"
3. 해시 안의 값에 접근하기
해시 안의 값은 오프셋(색인)을 통해 접근할 수 있습니다. 해시 안의 각 색인은 할당된 키(Key)입니다. 간단하게 대괄호 사이에 키의 이름을 넣음으로써 해당 키에 할당된 값을 조회할 수 있습니다.
#Hash에 저장된 값에 접근
puts animals["dog"]
puts ansimals["hippo"]
#반복문(Iteration)
.each 반복자를 사용하여 배열과 해시를 반복하는 코드에 대해서 살펴보도록 하겠습니다.
#배열 선언
friends = ["milhouse", "ralph", "nelson", "otto"]
#반복문을 통해 배열 출력
#friends.each{|name| puts "#{name}" }
#다차원 배열 선언
s = [["ham", "swiss"],["turkey", "cheddar"],["roast beef", "gruyere"]]
#반복문 통해 다차원 배열 출력
s.each do |x|
x.each do |y|
puts "#{y} "
end
end
#해시 선언
family = {"minsik" => "1",
"wonok" => "3",
"sojin" => "2",
"soyeon" => "4"
}
#반복문을 통해 해시 출력
family.each{ |key, value| puts "#{key} : #{value}" }
1. 배열 반복
배열 array를 받아 매 요소 element마다 코드를 샐행
| | 사이의 요소 이름은 자리 표시자(placeholder)를 나타냅니다.
array.each { |element| action }
2. 해시 반복
해시를 반복시킬 땐, 하나 이상의 자리 표시자 변수를 사용해야 합니다. 두 개의 자리 표시자를 사용하여 요소의 두 부분, 키-값을 출력할 수 있습니다.
hash.each{ |key, value| action }
3. 해시 정렬
해시 정렬은 .sort_by 메소드를 사용하여 특정 매개변수(parameter)에 따라 분류를 할 수 있습니다.
아래의 경우, 해시 hash는 key를 기준으로 오름차순 정렬 될 것입니다.
내림차순으로 정렬을 원할 경우 .reverse 메소드를 사용합니다.
hash = hash.sort_by{ |key, value| key }
#input으로 받은 문장의 각 단어 빈도수 구하기
input_text = "input your code please again input"
#띄어쓰기를 기준으로 문장을 자름
words = input_text.split(" ")
#해시 선언 및 초기화
frequencies = Hash.new(0)
words.each{
|word| frequencies[word] += 1
}
frequencies = frequencies.sort_by{
|key, value| value
}
#method 뒤에 !를 붙이는 건, 해당 객체의 내용이 바뀐다는 것을 의미
frequencies.reverse!
frequencies.each{
|word, frequency| puts word + " : " + frequency.to_s
}
'Ruby on Rails' 카테고리의 다른 글
| [Rails] Map vs Pluck (0) | 2022.07.04 |
|---|---|
| [Rails] Routiong (0) | 2022.06.07 |