Zsh 개발 가이드(제6 편 해시 표)
해시 표 는 배열 보다 더 복잡 한 데이터 구조 로 어떤 언어 에 서 는 관련 배열 이나 사전 등 이 라 고 불 린 다.쉽게 말 하면 해시 표 는 지정 한 키(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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.