Page 1 of 1

Search through nested arrays

Posted: Sun Dec 03, 2017 5:42 pm
by oellph
Hi all,

I've struggled to work this one out and finally need to turn to the community for help. I have a repeating array with many nested arrays (all fake data btw), where I want to extract the firstnames, lastnames and nhs number. The tricky part is that the nhs number is sometimes under the first nested array of [partyAddtionalInfo] and sometimes under the second.

My attempt, which works feels a bit clunky.

Code: Select all

  repeat for each Key temp in tParties
      repeat for each Key temp2 in tParties[temp][partyAdditionalInfo]
         repeat for each key temp3 in tParties[temp][partyAdditionalInfo][temp2]
            if tParties[temp][partyAdditionalInfo][temp2][temp3] is "uk.nhs.nhs_number" then
               put tParties[temp][partyAdditionalInfo][temp2]["value"] into tNHSNumber
            end if
         end repeat
      end repeat
      
      put tNHSNumber && tParties[temp][firstNames] && tParties[temp][lastNames] & cr after tPatientList
      
   end repeat
I was reading through this example (http://lessons.livecode.com/m/4071/l/21 ... dable-form) and I can almost 'sense' a better way, using a function which calls itself, but I can't quite figure it out.

I could leave my solution as is, but I'm keen to understand any better ways.

Image

Re: Search through nested arrays

Posted: Mon Dec 11, 2017 9:55 pm
by Da_Elf
i dont usually use "arrays" i would just create my own lists with items in it. so to search for an entry based on a part of my list if would use something like this.

Code: Select all

local mylist
on filllist
   put empty into mylist
   put "bob" & tab & "hope" & tab & "1234" & cr after mylist
   put "jill" & tab & "walker" & tab & "2345" & cr after mylist
   put "mike" & tab & "young" & tab & "3456" & cr after mylist
   put "peter" & tab & "hadley" & tab & "4567" after mylist
end filllist

function searchlist thesearch
   put empty into mysearch
   set itemdelimiter to cr
   repeat for each item linecheck in mylist
      set itemdelimiter to tab
      if item 3 of linecheck is thesearch then
         put linecheck & cr after mysearch
      end if
      set itemdelimiter to cr
   end repeat
   delete the last char of mysearch
   return mysearch
end searchlist

on mouseup
   filllist
   put the text of fld "search" into search
   answer searchlist(search)
end mouseup