Thanks to all for your instant solutions! You're great. S.

At 01:16 PM 5/31/04 -0400, grimmwerks wrote:
>Well, if you were using 2004 and created a global flash object, then you
>could toss each of these into an associative array, then sort using the
>properties quite easily.

At 01:28 PM 5/31/04 -0400, Mathew wrote:
>Hi Slava,
>
>Here is a simple solution using lingo only:
>
>Create a new holder and set it to be sorted.
>
>Loop through each of your items(that have prop1, prop2, prop3) and add them to a 
>'sortkey' property:
>[
>   [#sortkey:"_abc_02_02", [#Prop1: "abc", #Prop2: "02", #Prop3: "02"]],
>   [#sortkey:"_abc_02_01", [#Prop1: "abc", #Prop2: "02", #Prop3: "01"]],
>   [#sortkey:"_xyz_02_01", [#Prop1: "xyz", #Prop2: "02", #Prop3: "01"]],
>   [#sortkey:"_abc_01_01", [#Prop1: "abc", #Prop2: "01", #Prop3: "01"]]
>]
>
>The first _ is in there cause props can't start with a number, in the case that you 
>want to sort by prop 2 or 3 as the first sortitem.
>
>The items should be sorted properly, and you can loop through the list to recreate 
>the original list in a sorted format.
>
>This works ok for medium to small lists... if you are doing anything huge keep in 
>mind this solution is O(2n) complexity - it will ALWAYS have to traverse all the 
>items in the list once to assign the key, and another time to write the new list back 
>out.
>
>Anyone have any other methods they use?
>
>~Mathew

At 07:11 PM 5/31/04 +0200, Per-Erik wrote:
>I'd create a new list with the values of the combine properties and sort
>that one and in the same time making the same changes to the original list.
>
>My code:
>
>on sortList iList
>  -- Creating the list to sort --
>  tList = []
>  repeat with tData in iList
>    -- This is similar to the 'Prop1 + Prop2 + Prop3' you used. --
>    tValue = tData[#Prop1] & tData[#Prop2] & tData[#Prop3]
>    tList.append(tValue)
>  end repeat
>  
>  -- Tha actual sorting --
>  tCount = iList.count
>  repeat with i = 1 to tCount - 1
>    j = tCount
>    repeat while j > i
>      -- Checking the list you just created --
>      if tList[j-1]>tList[j] then
>        -- Making the change in the list you crated --
>        tData      = tList[j-1]
>        tList[j-1] = tList[j]
>        tList[j]   = tData
>        
>        -- Making the change in the original list --
>        tData      = iList[j-1]
>        iList[j-1] = iList[j]
>        iList[j]   = tData
>      end if
>      j=j-1
>    end repeat
>  end repeat
>  return iList  
>end
>
>on test
>  tt = [  [#Prop1: "abc", #Prop2: "02", #Prop3: "02"],  [#Prop1: "abc",
>#Prop2: "02", #Prop3: "01"],  [#Prop1: "xyz", #Prop2: "02", #Prop3: "01"],
>[#Prop1: "abc", #Prop2: "01", #Prop3: "01"]]
>  put sortList(tt)
>end
>
>-- [[#Prop1: "abc", #Prop2: "01", #Prop3: "01"], [#Prop1: "abc", #Prop2:
>"02", #Prop3: "01"], [#Prop1: "abc", #Prop2: "02", #Prop3: "02"], [#Prop1:
>"xyz", #Prop2: "02", #Prop3: "01"]]
>
>Hope this help.
>
>/Per-Erik Bergman
>http://www.uncle.nu/




>Slava Paperno wrote:
>>Is there an xplat Xtra that expands Directors limited ability to sort lists?
>>Or, can someone please advise me on how to implement this sort?
>>I have a linear list where the value of each item is a property list,
>>[  [#Prop1: "abc", #Prop2: "02", #Prop3: "02"],
>>   [#Prop1: "abc", #Prop2: "02", #Prop3: "01"],
>>  [#Prop1: "xyz", #Prop2: "02", #Prop3: "01"],
>>  [#Prop1: "abc", #Prop2: "01", #Prop3: "01"],  ]
>>I need to sort the outer linear list on the compound values of the three properties 
>>in the inner lists, so I get this:
>>[  [#Prop1: "abc", #Prop2: "01", #Prop3: "01"],
>>   [#Prop1: "abc", #Prop2: "02", #Prop3: "01"],
>>   [#Prop1: "abc", #Prop2: "02", #Prop3: "02"],    
>>   [#Prop1: "xyz", #Prop2: "02", #Prop3: "01"]  ]
>>If this were a database table with three fields and four records, I'd use a compound 
>>index, Prop1 + Prop2 + Prop3. How can I achieve the same result in Director MX?
>>The size of my lists and the number of properties in each list are quite modest, so 
>>peformance is not really an important factor.
>>Any advice will be appreciated.
>>Slava

[To remove yourself from this list, or to change to digest mode, go to 
http://www.penworks.com/lingo-l.cgi  To post messages to the list, email [EMAIL 
PROTECTED]  (Problems, email [EMAIL PROTECTED]). Lingo-L is for learning and helping 
with programming Lingo.  Thanks!]

Reply via email to