# llListReplaceList

*LSL function*

```lsl
list list llListReplaceList(list dest, list src, integer start_index, integer end_index);
```

- `list dest`: Target destination list.
- `list src`: Source list to insert.
- `integer start_index`: Zero-based start index (inclusive) of the replaced range.
- `integer end_index`: Zero-based end index (inclusive) of the replaced range.

- Returns: `list`
- Energy: 10

Returns a copy of the list dest with the inclusive range from start to end removed, and the elements of src inserted in its place at start.

Returns a [list](https://wiki.secondlife.com/wiki/list) that is a copy of **dest** with `start` through `end` removed and **src** inserted at `start`.

```lsl title="How to use" frame="terminal"
list result = llListReplaceList([], [], 0, 0);
```

## Caveats

- If `start` is past the end of **dest**, then **src** is appended to **dest**, it will not add null entries. To avoid this, create empty elements in the list first. A similar outcome occurs when using [negative indexes](https://wiki.secondlife.com/wiki/Category:LSL_Negative_Index).
- Just calling the function will not update the variable. You must store it (unless of course you are planning to act on the results straightway.)

:\{|

- **Bad:** — `llListReplaceList(MyList, ["New Item"], 2, 2)`
- **Good:** — `MyList = llListReplaceList(MyList, ["New Item"], 2, 2)`

|\}

- In [LSO](https://wiki.secondlife.com/wiki/LSO) ONLY (not [Mono](https://wiki.secondlife.com/wiki/Mono)): if you are storing to the same list, it can be more memory effective to clear the list before you store.

:\{|

- **Good:** — `MyList = llListReplaceList(MyList, ["New Item"], 2, 2)`
- **Better:** — `MyList = llListReplaceList((MyList = []) + MyList, ["New Item"], 2, 2)`

|\}

## Examples

<details open>
<summary>Example 1</summary>

```lsl
default
{
    state_entry()
    {
        list MyOldList = ["a", "b", "e", "d"];
        list MyNewList = llListReplaceList(MyOldList, ["c"], 2, 2);//replace the range starting and ending at
                                                   //index 2 with ["c"] and store it into MyNewList

        llOwnerSay("\""+llList2CSV(MyOldList) + "\"  ->  \"" + llList2CSV(MyNewList)+"\"");//display the change
        //Will say: "a, b, e, d"  ->  "a, b, c, d"
    }
}
```

</details>

<details>
<summary>Example 2</summary>

```lsl
// More commonly, you will be updating an existing list, replacing 1 or more items
// Here we replace entries 2 and 3 and over-write our original list
default
{
    state_entry()
    {
        list MyList = ["a", "b", "x", "y"];
        MyList = llListReplaceList(MyList, ["c", "d"], 2, 3);   // Over-write MyList, with the modified list (having replaced entries 2 & 3)

        llOwnerSay("\"" + llList2CSV(MyList) + "\"");     // display the modified list
        // Will say: "a, b, c, d"
    }
}
```

</details>

## Notes

To be clear, the list you are replacing in doesn't have to actually be a list of many elements. It can be a single item that you make into a single element list just by placing square brackets around it.

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

To act on a single element in a list, just quote its place in the list as both start and end. For instance, 0, 0 would act only on the first element in the list; 7,7 would act only on the 8th element.

For a function that will operate as `llListReplaceList` does, but work on strided lists, see [ListStridedUpdate](https://wiki.secondlife.com/wiki/ListStridedUpdate).

## Tests

- [llListReplaceList Test](https://wiki.secondlife.com/wiki/llListReplaceList_Test)

## See also

### Functions

- [llDeleteSubList](/functions/llDeleteSubList/)
- [llListInsertList](/functions/llListInsertList/)
- [llList2List](/functions/llList2List/)

---

*Source: [LlListReplaceList](https://wiki.secondlife.com/wiki/LlListReplaceList) on the Second Life Wiki. Content from the Second Life Wiki articles LlListReplaceList (revision 1194344, 2015-01-22) and Template:LSL Function/negative index (revision 1200041, 2016-05-02), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llListReplaceList/
