Difference between revisions of "User talk:ANSI Soderstrom/Simple LSL Array (Associative)"
Jump to navigation
Jump to search
m (→Answers) |
m (→Answers) |
||
Line 71: | Line 71: | ||
Hi Strife. I expected you ;) | Hi Strife. I expected you ;) | ||
;Question : | ;Question : Why are you supporting multiple values for a key? It looks like you only return the last one with GET. PUT updates all of them which sorta makes having them pointless.<br /> | ||
;Answer : Its not only a support for multiple values for a key. Its the posibillity that a KEY can have the same spelling like a VALUE<br /> | |||
:e.g. KEY1 = TEST1 / TEST1 = TEST2 / KEY2 = TEST1 / TEST2 = TEST1 / TEST3 = KEY1<br /> | :e.g. KEY1 = TEST1 / TEST1 = TEST2 / KEY2 = TEST1 / TEST2 = TEST1 / TEST3 = KEY1<br /> | ||
:^^^try to get the right values with your GET-Method and u will see what i mean ;) | :^^^try to get the right values with your GET-Method and u will see what i mean ;) | ||
;Question : # Where is the REMOVE function? | ;Question : # Where is the REMOVE function? | ||
;Answer : Uh Oh. Please give me few hours ;) | |||
;Question : # This is not what I think of when i think of "array" nor a simple one at that, what you have here is an "{{Wikipedia|associative | ;Question : # This is not what I think of when i think of "array" nor a simple one at that, what you have here is an "{{Wikipedia|associative array|associative array}}". | ||
;Answer : U win ! |
Revision as of 22:17, 22 April 2010
Thoughts
- Why are you supporting multiple values for a key? It looks like you only return the last one with GET. PUT updates all of them which sorta makes having them pointless.
- Where is the REMOVE function?
- This is not what I think of when i think of "array" nor a simple one at that, what you have here is an " associative array".
-- Strife (talk|contribs) 06:24, 22 April 2010 (UTC)
A quick implementation
It's possible that it's not the best way to implement the loop condition. But it's clever. I've also added support for setting and removing multiple keys at a time. This is for convenience and there is little to no performance gain from doing this vs individual calls. I've checked the logic, it should work, I haven't tested it though. -- Strife (talk|contribs) 07:14, 22 April 2010 (UTC)
<lsl>list GET(list ARRAY, list KEY) {
if(llGetListLength(KEY) == 1) { integer position = llListFindList(ARRAY, KEY) + 1; if(position) { return llList2List(ARRAY, position, position); } } return [];
}
list PUT(list ARRAY, list KEY, list VALUE){
integer len = -llGetListLength(KEY); if(len == -llGetListLength(VALUE) && len) { integer position; do { list temp = []; list Key = llList2List(KEY, len, len); while((position & 1) == !(position = llListFindList(ARRAY, Key) + 1)) { temp = temp + llList2List(ARRAY, 0, position); ARRAY = llDeleteSubList(ARRAY, 0, position); } if(position) { ARRAY = temp + llListReplaceList(ARRAY, llList2List(VALUE, len, len), position, position); } else { ARRAY = temp + ARRAY + Key + llList2List(VALUE, len, len); } } while( ++len ); } return ARRAY;
}
list REMOVE(list ARRAY, list KEY){
integer len = -llGetListLength(KEY); if(len) { do { list temp = []; integer position; list Key = llList2List(KEY, len, len); while((position & 1) == !(position = llListFindList(ARRAY, Key) + 1)) { temp += llList2List(ARRAY, 0, position); ARRAY = llDeleteSubList(ARRAY, 0, position); } if(position) { ARRAY = temp + llDeleteSubList(ARRAY, position - 1, position); } else { ARRAY = temp + ARRAY; } } while( ++len ); } return ARRAY;
} </lsl> -- Strife (talk|contribs) 07:14, 22 April 2010 (UTC)
Answers
Hi Strife. I expected you ;)
- Question
- Why are you supporting multiple values for a key? It looks like you only return the last one with GET. PUT updates all of them which sorta makes having them pointless.
- Answer
- Its not only a support for multiple values for a key. Its the posibillity that a KEY can have the same spelling like a VALUE
- e.g. KEY1 = TEST1 / TEST1 = TEST2 / KEY2 = TEST1 / TEST2 = TEST1 / TEST3 = KEY1
- ^^^try to get the right values with your GET-Method and u will see what i mean ;)
- Question
- # Where is the REMOVE function?
- Answer
- Uh Oh. Please give me few hours ;)
- Question
- # This is not what I think of when i think of "array" nor a simple one at that, what you have here is an " associative array".
- Answer
- U win !