LlListReplaceList/ko

From Second Life Wiki
Jump to navigation Jump to search

설명

함수: list llListReplaceList( list dest, list src, integer end, integer start );
296 함수ID
0.0 지연
10.0 에너지

반환되는 값은 목록 dest의 색인 start에서 end까지가 src로 삽입 치환된 새로운 목록.

• list dest 결과
• list src 원본
• integer end end 색인
• integer start start 색인

start & end음의 색인을 지원한다.

명세

색인
처음 0 -length
마지막 length - 1 -1

우선 임의의 음수 색인은 양수 색인으로 먼저 생각한다

  • 만약 start <= end이면 적용 범위는 start에서 시작하여 end에서 끝난다.[start, end]
  • 만약 start > end이면 적용 범위는 0에서 시작하여 end를 지난 뒤 다시start에서 출발하여 -1로 간다. [0, end] + [start, -1]

(마지막 색인보다 큰) 전체 길이 이전의 양의 색인, 또는 (첫 색인보다 전방에 위치한) 시작점 이전의 음의 색인 만이 유효하다. 효과는 예측가능하며 항목들은 어딘가에 실제로 존재하는 것 처럼 다루어지지만, 실은 출력 이전에 모두 삭제된다.

더 자세한 정보는 음의 색인을 참조.

만약 startdest의 마지막 색인 보다 크면, src는 빈 원소 없이 dest의 뒤에 연결된다. 이것을 피하려면 목록의 후미에 빈 원소들을 먼저 생성해서 붙여야 한다. 음의 색인을 사용할 때에도 같은 식으로 작동한다.

주의

  • (결과를 곧바로 다시 이용하는 경우가 아니라면) 함수를 호출하는 것 만으로는 값이 갱신되지 않으며 저장을 할 변수가 있어야 한다.
• 나쁨: llListReplaceList(a, ["c"], 2, 2)
• 좋음: a = llListReplaceList(a, ["c"], 2, 2)
  • 같은 목록을 저장할 경우 저장하기 전 목록을 비우는 것이 메모리 사용에 더 효율적이다.
• 좋음: a = llListReplaceList(a, ["c"], 2, 2)
• 더 좋음: a = llListReplaceList((a = []) + a, ["c"], 2, 2)

예제

<lsl>default {

   state_entry()
   {
       list a = ["a", "b", "e", "d"];
       list b = llListReplaceList(a, ["c"], 2, 2);
       //색인 2에서 출발해서 2에서 끝나는 범위를 ["c"]로 치환하고 b에 저장한다.
       llOwnerSay("\""+llList2CSV(a) + "\"  ->  \"" + llList2CSV(b)+"\"");//변경되는 것을 출력
       //출력: "a, b, e, d"  ->  "a, b, c, d"
   }

}</lsl>

기록

확실한 동작을 위해서는 치환하려는 목록은 너무 많은 원소를 갖고 있어서는 안된다. 단일 항목을 대괄호로 감싸면 단 하나의 원소를 갖는 목록이 만들어진다.

<lsl>list TargetList = ["a", "b", "c", "z", "e"]; list InsertList = ["d"];</lsl>

목록에서 하나의 원소만 치환을 하려면 해당 원소를 지시하는 시작과 끝의 색인을 같게 하면 된다. 이를테면 0, 0은 첫 번째 원소에7, 7 은 8번째 원소에만 작용을 하게 된다.

llListReplaceList와 같이 작동하지만 절편 목록에 대해 그와 같은 일을 하려면 ListStridedUpdate를 참고할 것.

함께 보기

함수

• llDeleteSubList
• llListInsertList
• llList2List

문서

•  Negative_Index

상세 기록

이 글이 유용하지 않으세요? LSL Wiki의 관련항목이 도움을 줄 수 있을 지도 모릅니다.