LlGetListLength/ko

From Second Life Wiki
Jump to: navigation, search

설명

함수: integer llGetListLength( list src );
185 함수ID
0.0 지연
10.0 에너지

반환되는 값은 목록 src의 원소의 개수.

• list src

주의

  • LSL 컴파일러는 주어진 조건문을 최적화하지 않으며 조건을 벗어나는 경우에 대해 따로 처리하지 않을 것이다. 문자열 작업에서 엄밀하게 필수적이지 않은 한, 키와 목록은 순환부의 밖에서 처리되게 작성해야한다. 좋은 예시를 참고할 것.

예제

<lsl>//Basic usage default {

   state_entry()
   {
       list l = ["one", "two", "three"];
       integer i = llGetListLength(l);
       llOwnerSay("there are " + (string)i + " entries in the list");
   }

}</lsl>

기록

좋은 예시

목록을 순환시킬 때 목록의 길이를 사용하려면 먼저 값을 얻어내어 저장한 후에 순환을 시키는 것이 좋다:

<lsl> integer i = 0; integer length = llGetListLength(mylist); for (; i < length; ++i) {

   llSay(0, llList2String(mylist, i));

} </lsl>

다음 예제는 삼가해야 할 방식인데, "for" 순환문에서 매번 시행 마다 목록 길이를 계산하기 때문에 비효율적인 것이다. 목록의 전체 길이가 달라질 때에만 한 번 값을 얻어내는 것으로 충분하다.[1]

<lsl> integer i; for (i = 0; i < llGetListLength(mylist); ++i) {

   llSay(0, llList2String(mylist, i));

} </lsl>

최적화

목록의 길이를 계산할 때에(바이트코드 관점에서) 보다 빠르고 가벼운 방법은 빈문자열과 '같지 않음'을 비교하는 것이다. 이것이 작동하는 까닭은 '같지 않음'의 비교는 길이의 차이를 반환하기 때문이다. <lsl> list in; integer len_in = llGetListLength(in); integer flen_in = (in != []); //flen_in and len_in will be the same

integer neg_len_in = -llGetListLength(in); integer fneg_len_in = ([] != in); //fneg_len_in and neg_len_in will be the same </lsl>

함께 보기

함수

•  llListStatistics LIST_STAT_NUM_COUNT – 문자열의 정수실수의 개수를 반환한다.
•  llStringLength 문자열의 길이를 반환한다.

상세 기록

출처

'linden\indra\lscript\lscript_library\lscript_alloc.cpp' @ lsa_cmp_lists
'linden\indra\lscript\lscript_execute\lscript_execute.cpp' @ list_list_operation

주석

  1. ^ 길이를 재계산하는 것은 스크립트를 느리게 하는데, VM이 전체 목록을 (변수값들과 함께) 복사해서 임시 기억소에 밀어넣어야 하기 때문이다(따라서 길이가 재계산될 때 부하가 걸려 임시 저장고가 사라질 수도 있다).
이 글이 유용하지 않으세요? LSL Wiki의 관련항목이 도움을 줄 수 있을 지도 모릅니다.