eric terry <[EMAIL PROTECTED]> wrote:
> [#userID: "Bob" , #minimumBet: "50", #userLevel: "20"]
> [#userID: "Phil" , #minimumBet: "10", #userLevel: "80"]
> [#userID: "Ron" , #minimumBet: "25", #userLevel: "10"]
> [#userID: "Jay" , #minimumBet: "75", #userLevel: "40"]
> 
> Is there a way to sort that via #minimumBet or
> #userLevel?

Hi Eric,

Here's a handler that returns a duplicate proplist sorted by value:

on mSortByValue(aPropList) -------------------------------------------
  -- RETURNS a property list with the same props and values as
  -- aPropList, but sorted by value.  A separate list is returned,
  -- since the original aPropList may already be sorted by prop, and
  -- there is no way to unsort it
  --------------------------------------------------------------------
  
  if ilk(aPropList) <> #propList then
    -- No sorting is possible
    return aPropList
  end if

  tCount = aPropList.count
  
  -- Create a sorted list where values = props and vice versa
  tValueList = [:]
  tValueList.sort()
  repeat with i = 1 to tCount
    tValueList.setaProp(aPropList[i], aPropList.getPropAt(i))
  end repeat
  
  -- Inverse the props and values a second time
  tPropList = [:]
  repeat with i = 1 to tCount
    tPropList.setaProp(tValueList[i], tValueList.getPropAt(i))
  end repeat
  
  return tPropList
end mSortByValue


-- IN THE MESSAGE WINDOW

x = [#a: 3, #b: 2, #c: 1, #d: 9, #e: 8, #f: 6, #g: 5, #h: 4, #i: 0, #j: 7]
x.sort()
put mSortByValue(x)
-- [#i: 0, #C: 1, #B: 2, #A: 3, #h: 4, #g: 5, #f: 6, #j: 7, #e: 8, #d: 9]



And here's a handler that answers your question:

on sortByValueInSubList(aListOfLists, aProp)
  tCount = aListOfLists.count
  tList = [:]
  tList.sort()
  
  repeat with i = 1 to tCount
    tSubList = aListOfLists[i]
    tValue   = tSubList[aProp]
    tList.setAProp(tValue, tSubList)
  end repeat
  
  aListOfLists.deleteAll()
  repeat with i = 1 to tCount
    aListOfLists.append(tList[i])
  end repeat
end repeat


-- IN THE MESSAGE WINDOW

x = [[#userID: "Bob" , #minimumBet: "50", #userLevel: "20"], [#userID:
"Phil" , #minimumBet: "10", #userLevel: "80"], [#userID: "Ron" ,
#minimumBet: "25", #userLevel: "10"], [#userID: "Jay" , #minimumBet: "75",
#userLevel: "40"]]
  
sortByValueInSubList(x, #userLevel)
put x
-- [[#userID: "Ron", #minimumBet: "25", #userLevel: "10"], [#userID: "Bob",
#minimumBet: "50", #userLevel: "20"], [#userID: "Jay", #minimumBet: "75",
#userLevel: "40"], [#userID: "Phil", #minimumBet: "10", #userLevel: "80"]]


Cheers,

James


[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