I have only partially been following this thread, but if you need to
find the array 'content' in an arbitrary nested array from a comma
delimited path of array keys, recursion is the way to do it:
function fetchArrayContentFromPath pArray,pPath
-- pArray is an array
-- pPath is a comma delimited 'path' of array keys to the desired content
local tKey
if pArray is not an array then
return pArray -- I have reached the content, so return that content
else if pPath is empty then
return pArray -- should not happen in a tree widget, but this is if
the path ends in an array instead of the content of an array element
else
put item 1 of pPath into tKey -- get the key of element in the
currnet path
delete item 1 of pPath -- remove it from the current path,
so the path is the next set of key(s)
return fetchArrayContentFromPath(pArray[tKey],pPath) - recursively
fetch the remainig keys from the currnet array element
end if
end fetchArrayContentFromPath
It will not matter is the 'path' is key1,key1 or
key1,key2,key3,key4,key5,key6,key7, or whatever.
On 4/24/2021 7:10 AM, Keith Clarke via use-livecode wrote:
Hi folks,
Inspired by Jaque’s (working - thank you!) response to my question “Show Tree
widget row contents on hover” I’ve isolated the final piece of that puzzle that
leaves me baffled.
Specifically, can LiveCode accept a dynamically built key for a nested
multi-dimensional array? Copy the button script recipe below to see the problem.
Perhaps the LC array experts here can help explain why Jaque’s hard-wired key
definition works but my attempts to replicate this syntax via scripting to
support variable depth of arrays get ignored? Is it my syntax or just the way
arrays work in LC…?
on mouseUp pButtonNumber
# Create a nested array
put "Content" into tArray["key1"]["key2"]["key3"]["key4"]
# Replicate the path response from the Tree widget actionInspect function
put "key1,key2,key3,key4" into pPath
# Jaque's 'hard-wired' array key recipe works!
answer tArray[item 1 of pPath][item 2 of pPath][item 3 of pPath][item 4 of
pPath] --returns 'Content'
# Replicate Jaque's syntax dynamically
put the number of items in pPath into tKeyCount
put empty into iNum
repeat for each item i in pPath
add 1 to iNum
# Try building the full key string
put "[" & item iNum of pPath & "]"after tKey1
# Try building keys string to 'embed' into the regular array key syntax
put item iNum of pPath after tKey2
if iNum < tKeyCount then put "][" after tKey2
# Try building by each key
if i is not empty then put "[" & item iNum of pPath & "]" after tArray2
end repeat
# Dynamic tKey1 results
answer tKey1 -- returns '["key1"]["key2"]["key3"]["key4"]' ...seems 'correct'
answer tArray & tKey1 -- returns '["key1"]["key2"]["key3"]["key4"]' ...dynamic
key definition is not appended to array(?)
# Dynamic tKey2 results
answer tKey2 -- returns '"key1"]["key2"]["key3"]["key4"'
answer tArray[tKey2] -- returns null ...dynamic key definition is not
understood (as first level key)?
answer tArray2 -- returns '["key1"]["key2"]["key3"]["key4"]' ...dynamic key
definition is not appended to array(?)
end mouseUp
Best,
Keith
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode