2014-10-15 2 views
0

tcl을 사용하여 복잡한 데이터를 처리해야합니다. 데이터를 저장할 3 차원 목록이 필요합니다. 하지만이 작업에는 tcl이 좋지 않습니다.tcl을 사용하여 다중 차원 목록을 처리하기가 어렵습니다.

현재 연구에 따르면 tcl은 listname (index)과 같은 간단한 목록 색인을 지원하지 않습니다.

여러 차원 목록의 경우 특정 요소에 대해 새 값을 할당하려는 경우 매우 어려울 수 있습니다.

데이터를 효과적으로 처리하는 기술이 있습니까?

답변

2

다차원 배열의 가장 효율적인 표현은 중첩 된 목록입니다 (단, 희소 배열을 사용하지 않는 한). 이를 돕기 위해 lrepeat 생성 용으로, 다중 색인 lindex (독서 용) 및 lset (작성 용)이 있습니다. 당신이 얻을 수 있도록

# Create a 5x5x5 structure, filled with float zeroes 
set example [lrepeat 5 [lrepeat 5 [lrepeat 5 0.0]]] 
# Index into the structure 
set value [lindex $example 1 2 3] 
# Write a value back into the structure 
lset example 1 2 3 [expr {$value + 8.75}] 

구현 (중첩 목록 포함) 목록에 대한 효율적인 복사 (copy-on-write) 방식을 사용 공간을 절약 가능한 최소한의 중복 필요한 경우를의 공격적인 복사로 모든 ​​것이 순수한 가치라는 착각을 유지하기 위해서 훨씬 빠른 것을 제외하면 ...

물론이 작업을 많이 수행한다면 VecTcl을 보는 것이 더 나을 것입니다.

+0

, 감사합니다. 나는 시도 할 것이다, 그것은 좋게 들린다. 이제는 여러 목록에 대한 읽기 및 쓰기를 처리하는 데 아주 기본적인 방법을 사용합니다. 데이터가 크면 작동하기에는 너무 느립니다. –

0

listname (색인)을 원하면 배열을 사용해보십시오. 당신은 단순히 적절한 색인을 설정할 수있는 다중 차원 배열은 쉽게 :

나는, 배열, 목록 등 DONAL의 예 또는 사전보다 효율적으로 될 것이라고 모르는
set example(1,2,3) $value 
set value $example(1,2,3) 

:

dict set example 1 2 3 $value 
set value [dict get $example 1 2 3] 
관련 문제