수색…


비고

티클 사전에 그 밖의 임의의 값을 임의의 값으로의 매핑을 유지 값이다. 그것들은 Tcl 8.5에서 소개되었지만 (현재는 지원되지 않는) Tcl 8.4에 대한 제한된 버전이 있습니다. 사전은 구문 적으로 짝수 개의 요소가있는 목록과 동일합니다. 요소의 첫 번째 쌍은 사전의 첫 번째 키와 값이고, 두 번째 쌍은 두 번째 튜플입니다.

그러므로:

fox "quick brown" dogs "lazy"

유효한 사전입니다. 동일한 키는 여러 번 될 수 있지만 정확히 후자의 값이 이전 값에있는 것과 같습니다. 이들은 같은 사전입니다 :

abcd {1 2 3} defg {2 3 4} abcd {3 4 5}
abcd {3 4 5} defg {2 3 4}

공백 문자는 목록과 마찬가지로 중요하지 않습니다.

사전의 중요한 개념은 반복 순서입니다. 사전은 키 삽입 순서를 반복 순서로 사용하려고 시도하지만 이미있는 키의 값을 업데이트하면 해당 키의 값을 덮어 씁니다. 새로운 키가 끝나갑니다.

참고 문헌 : dict

목록 - 중첩 된 사전에 추가

이 사전이 있다면 :

set alpha {alice {items {}} bob {items {}} claudia {items {}} derek {items {}}}

Alice의 항목에 "fork"및 "땅콩"을 추가하려는 경우이 코드는 작동하지 않습니다.

dict lappend alpha alice items fork peanut
dict get $alpha alice
# => items {} items fork peanut

명령이 키 토큰이 어디에서 끝나고 값이 목록 추가 시작인지 알 수 없기 때문에 명령은 하나의 키 토큰으로 제한됩니다.

내부 사전에 추가하는 올바른 방법은 다음과 같습니다.

dict with alpha alice {
    lappend items fork peanut
}
dict get $alpha alice
# => items {fork peanut}

이 명령은 dict with 명령을 사용하여 우리가 제공하는 키 토큰의 수만큼 중첩 된 사전을 탐색 할 수 있기 때문에 효과적입니다. 그런 다음 해당 레벨의 키와 동일한 이름을 가진 변수를 만듭니다 (단 하나 : items ). 변수는 사전의 해당 항목 값으로 초기화됩니다. 값을 변경하면 변경된 값은 스크립트 종료시 사전 항목 값을 업데이트하는 데 사용됩니다.

(명령이 종료되면 변수가 계속 존재 함을 유의하십시오.)

사전의 기본 사용

사전 만들기 :

set mydict [dict create a 1 b 2 c 3 d 4]
dict get $mydict b ; # returns 2
set key c
set myval [dict get $mydict $key]
puts $myval
# remove a value
dict unset mydict b
# set a new value
dict set mydict e 5

사전 키는 중첩 될 수 있습니다.

dict set mycars mustang color green
dict set mycars mustang horsepower 500
dict set mycars prius-c color orange
dict set mycars prius-c horsepower 99
set car [dict get $mycars mustang]
# $car is: color green horsepower 500
dict for {car cardetails} $mycars {
  puts $car
  dict for {key value} $cardetails {
    puts "  $key: $value"
  }
}

dict get 명령으로 오류가 발생할 수 있습니다.

set alpha {a 1 b 2 c 3}
dict get $alpha b
# => 2
dict get $alpha d
# (ERROR) key "d" not known in dictionary

dict get 을 사용하여 누락 된 키 값을 검색하면 오류가 발생합니다. 오류를 방지하려면 dict exists 사용하십시오.

if {[dict exists $alpha $key]} {
    set result [dict get $alpha $key]
} else {
    # code to deal with missing key
}

누락 된 키를 처리하는 방법은 상황에 따라 다릅니다. 한 가지 간단한 방법은 result 를 기본 "빈"값으로 설정하는 result 입니다.

코드가 사전에있는 다른 키를 검색하지 않으면 dict get 은 물론 실패하지 않습니다. 그러나 임의의 키의 경우 dict get 은 보호해야하는 작업입니다. 예외 catching도 작동하지만 dict exists 로 테스트하는 것이 바람직합니다.

사전 반복

foreach 와 비슷한 dict for 를 사용하여 사전의 내용을 반복 할 수 있습니다.

set theDict {abcd {ab cd} bcde {ef gh} cdef {ij kl}}
dict for {theKey theValue} $theDict {
    puts "$theKey -> $theValue"
}

이 출력은 다음과 같습니다.

abcd -> ab cd
bcde -> ef gh
cdef -> ij kl

dict keys 를 사용하여 dict keys 를 나열하고 반복하여 동일한 결과를 얻을 수 있습니다.

foreach theKey [dict keys $theDict] {
    set theValue [dict get $theDict $theKey]
    puts "$theKey -> $theValue"
}

그러나 dict for 는 더 효율적입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow