#!/usr/bin/ruby

# 배열

=begin
배열의 인덱스는 0부터 시작합니다.
인덱스가 음수인 경우에는 뒤에서부터 거꾸로 세는데,
-1이 가장 마지막 요소를 가리킵니다.
=end


# 배열의 생성

array = [1, "two", 3] # 배열의 리터럴을 사용해서 생성
array = Array(1..10) # 메서드를 사용한 생성
array = Array.new # 생성자를 통한 생성

# 배열의 요소에 접근하는 방법
array[0] = "A"
array[1] = "B"
array[3] = "D"
# 또는 메서드를 사용해서 접근
puts array.at(0)
puts array.first # 첫 번째 요소
puts array.last  # 마지막 요소
array.take(3) # 배열의 맨 앞에서부터 3개로 이루어진 배열을 반환
array.drop(3)

puts array.length # 배열의 크기
puts array.count # 배열의 갯수
array.empty? # 빈 배열?
array.include?("Some Item") # 주어진 아이템이 배열에도 존재하는지 여부

# 배열에 추가
array.push("New item") # 배열의 맨 뒤에 아이템 추가
array << "Hello"

array.unshift("A") # 배열의 맨 앞에 아이템 추가
array.insert(3, "Orange", "Kiwi") # 원하는 인덱스에 아이템 추가

# 아이템 제거
array.pop # 배열에서 맨 끝 요소를 빼낸 다음 반환
array.shift # 배열의 맨 앞 아이템을 꺼내서 반환
array.delete_at(2) # 특정 인덱스의 아이템을 반환
array.delete("Orange")

array.compact # 배열에서 nil 값을 가진 아이템이 제거된 배열을 반환
array.compact! # 배열에서 nil 값을 가진 아이템을 제거한 다음 원래의 배열에 값을 할당.

# 반복
array.each{|item|
  puts ${item}
}

array.reverse_each{|word|
  str += "#{word}"
}
array.map {|i|
  i*0.6
}

# 추출

array.select {
  |a| a> 3
}
array.reject {
  |a| a< 3
}
array.delete_if {
  |a| a> 4
}
array.keep_if {
  |a| a< 4
}


array.at(0)
array.first()
array.last()
array.min()
array.max()
array.take(3)
array.drop(3)
array.shuffle()




END{
  # https://ruby-doc.org/3.3.0/Array.html
}
