Zsh 개발 가이드(제6 편 해시 표)

3934 단어 linuxzshshell
독 서 를 지도하 다
해시 표 는 배열 보다 더 복잡 한 데이터 구조 로 어떤 언어 에 서 는 관련 배열 이나 사전 등 이 라 고 불 린 다.쉽게 말 하면 해시 표 는 지정 한 키(key)에 대응 하 는 값(value),키 와 값 의 관 계 를 저장 하 는 데 사 용 됩 니 다.사전 의 단어 와 해석 의 대응 관계 처럼 단 어 를 통 해 해석 을 신속하게 찾 을 수 있 으 며 처음부터 차례대로 일치 하지 않 아 도 됩 니 다.정확히 말 하면 해시 표 는 이 기능 의 실현 방식 일 뿐 각종 나무 나 다른 데이터 구 조 를 이용 하여 실현 할 수 있다.서로 다른 실현 방식 은 서로 다른 장면 에 적합 하고 사용 방법 은 같다.그러나 개념 을 간소화 하기 위해 해시 표 라 는 이름 을 통일 적 으로 사용한다.
해시 표 정의
다른 변수 유형 과 달리 해시 표 는 미리 설명 해 야 합 니 다.해시 표 의 할당 문법 은 배열 과 마찬가지 로 설명 하지 않 으 면 구분 할 수 없 기 때 문 입 니 다.
% typeset -A hashmap
#     local,        
% local -A hashmap

#           ,       、 、 、 
% hashmap=(k1 v1 k2 v2)

#     echo      
% echo $hashmap
v1 v2

#    (kv)        ,(kv)               
% echo ${(kv)hashmap}
k1 v1 k2 v2
 
#              
% echo $#hashmap
2

원소 읽 기와 쓰기
해시 표를 읽 고 쓰 는 방법 은 배열 과 유사 하 며 위치 추적 에 사용 되 는 숫자 만 문자열 로 바 뀌 었 다.
#            
% local -A hashmap=(k1 v1 k2 v2 k3 v3)
% echo $hashmap[k2]
v2

% hashmap[k2]="V2"

#             ,      
% unset "hashmap[k1]"
% echo ${(kv)hashmap}
k2 V2 k3 v3

해시 시계
#             
% hashmap+=(k4 v4 k5 v5)
% echo $hashmap
V2 v3 v4 v5


% local -A hashmap1 hashmap2
% hashmap1=(k1 v1 k2 v2)
% hashmap2=(k2 v222 k3 v3)

#      ,         
% hashmap1+=(${(kv)hashmap2})
#      ,      ,          
% echo ${(kv)hashmap1}
k1 v1 k2 v222 k3 v3

해시 시계 옮 겨 다 니 기
(kv)(k)등 으로 해시 표를 배열 로 바 꾼 다음 에 옮 겨 다 닙 니 다.
% local -A hashmap=(k1 v1 k2 v2 k3 v3)

#     
% for i ($hashmap) {
> echo $i
> }
v1
v2
v3

#     
% for i (${(k)hashmap}) {
> echo $i
> }
k1
k2
k3

#        
% for k v (${(kv)hashmap}) {
> echo "$k -> $v"
> }
k1 -> v1
k2 -> v2
k3 -> v3

원소 찾기
키 가 존재 하 는 지 판단 합 니 다.
% local -A hashmap=(k1 v1 k2 v2 k3 v3)
% (($+hashmap[k1])) && echo good
good
% (($+hashmap[k4])) && echo good

어떤 값 이 존재 하 는 지 판단 할 필요 가 있다 면 값 의 배열 에 대해 직접 판단 하면 된다.그러나 이렇게 하면 하 쉬 표 의 우 세 를 나 타 낼 수 없다.
% local -A hashmap=(k1 v1 k2 v2 k3 v3)
# value         ,     local -a        
% value=($hashmap)

% (( $value[(I)v1] )) && echo good
good
% (( $value[(I)v4] )) && echo good

요소 정렬
해시 표 요 소 를 정렬 하 는 방법 은 배열 과 유사 합 니 다.k v 두 가지 옵션 이 많 습 니 다.나머지 옵션 은 o(오름차 순),O(내림차 순),n(숫자 크기),i(대소 문자 무시)등 통용 되 며 일일이 예 를 들 지 않 습 니 다.
% local -A hashmap=(aa 33 cc 11 bb 22)

#      
% echo ${(o)hashmap}
11 22 33

#      
% echo ${(ok)hashmap}
aa bb cc

#         
% echo ${(okv)hashmap}
11 22 33 aa bb cc

문자열,파일 구조 해시 표
해시 표 는 배열 로 구 성 될 수 있 기 때문에 문자열,파일 구조 해시 표 와 배열 의 조작 이 같 고 더 이상 예 를 들 지 않 습 니 다.
% str="k1 v1 k2 v2 k3 v3"
% local -A hashmap=(${=str})
% echo $hashmap
v1 v2 v3

해시 표 의 모든 요 소 를 통일 적 으로 처리 합 니 다.
해시 표 의 모든 요 소 를 통일 적 으로 처리 합 니 다.배열 에 대한 작업 과 유사 합 니 다.k v 두 가지 옵션 이 더 있 으 면 키 처리 인지 값 처리 인지 지정 할 수 있 습 니 다.같이 처리 할 수 있 습 니 다.더 이상 일일이 예 를 들 지 않다.
% local -A hashmap=(k1 v1 k2 v2 k3 v3)
% print ${(U)hashmap}
V1 V2 V3

% print ${(Uk)hashmap}
K1 K2 K3

% print ${(Ukv)hashmap}
K1 V1 K2 V2 K3 V3

해시 시계 에 도 사용 할 수 있 습 니 다.
% local -A hashmap=(k1 v1 k2 v2 k3 v3)

#        
% echo ${hashmap:#v1}
v2 v3

#         
% echo ${(Mk)hashmap:#k[1-2]}
k1 k2

총결산
이 편 은 하 쉬 표 의 기본 용법 을 간단하게 설명 하 였 다.편폭 이 길지 않 지만 해시 표 의 조작 은 배열 과 유사 하기 때문에 많은 배열 을 조작 하 는 방법 은 해시 표 에 사용 할 수 있 고 키 나 값 을 따로 배열 로 처리 할 수 있 기 때문에 해시 표를 조작 하 는 것 이 더욱 복잡 하 다.
또 좀 더 진 보 된 처리 배열 과 하 쉬 표 방법 도 있 으 며,나중에 이야기 할 것 이다.
본 고 는 더 이상 업데이트 되 지 않 습 니 다.전체 시리즈 글 은 여기 서 유지 보 수 를 업데이트 합 니 다github.com/goreliu/zshguide
유 료 로 Windows,Linux,Shell,C,C++,AHK,Python,JavaScript,Lua 등 분야 관련 문 제 를 해결 하고 유연 하 게 가격 을 책 정 합 니 다.상담 을 환영 합 니 다.위 챗 ly 50247.

좋은 웹페이지 즐겨찾기