Doug and Gordon, thanks for the advise. I decided on the following
solution.
public function populateStatusArray(array:Array):void
{
var newArrayHashMap : Object = new Object();
var status : Array = new Array;
status.push("All");
var n:int = array.length;
for (var i:int = 0; i < n; i++)
{
if (newArrayHashMap[array[i].status] == undefined)
{
newArrayHashMap[array[i].status] = new Object();
status.push(array[i].status);
}
}
status.sort();
ModelLocator.getInstance().statusArray = status;
}
Tim Hoff
--- In [email protected], "Gordon Smith" <[EMAIL PROTECTED]>
wrote:
>
> You can use a plain Object as a Set... see the code below.
>
> You first put key/value pairs into the Object, but it makes no
> difference what the values are. You just care about the keys, and
the
> Object's hash table takes care of ensuring that setting a key more
than
> once is harmless.
>
> Then you iterate over the Object, pulling out the unique keys into
an
> Array that can be sorted.
>
> Finally, you stick "All" at the top, after the sort.
>
> - Gordon
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="600"
> height="600">
>
> <mx:Script>
> <![CDATA[
>
> [Bindable]
> private var array:Array =
[ "B", "C", "A", "B", "A", "D"
> ];
>
> public function getUniqueItems(array:Array):Array
> {
> var uniqueItemHash:Object = {};
> var n:int = array.length;
> for (var i:int = 0; i < n; i++)
> {
> uniqueItemHash[array[i]] = true;
> }
>
> var uniqueItemArray:Array = [];
> for (var p:String in uniqueItemHash)
> {
> uniqueItemArray.push(p);
> }
>
> uniqueItemArray.sort();
> uniqueItemArray.unshift("All");
> return uniqueItemArray;
> }
>
> ]]>
> </mx:Script>
>
> <mx:ComboBox dataProvider="{getUniqueItems(array)}"/>
>
> </mx:Application>
>
> -----Original Message-----
> From: [email protected]
[mailto:[EMAIL PROTECTED] On
> Behalf Of Doug Lowder
> Sent: Tuesday, April 11, 2006 5:00 PM
> To: [email protected]
> Subject: [flexcoders] Re: AS3 Array Question
>
> For large arrays, it will be more efficient to do this:
>
> 1) Make a copy of the input array, if necessary
> 2) Sort the array by status
> 3) Iterate through the array once, storing new status values and
> skipping the duplicates
>
>
> --- In [email protected], "turbo_vb" <TimHoff@> wrote:
> >
> > I'm trying to populate a dataProvider array for a comboBox that
> > contains unique status values from another array, that is used
as
> > the dataProvider for a dataGrid. The comboBox is used to filter
> the
> > dataGrid. The code below works, but I seem to remember seeing
> this
> > done somewhere that doesn't use nested for statements. Does
> anyone
> > know how I can identify if the array's status value already
exists
> > in the new status array without iterating the new array every
time?
> >
> > public function populateStatusArray(array:Array):void {
> >
> > var status : Array = new Array;
> > status.push("All");
> >
> > var n:int = citations.length;
> > for (var i:int = 0; i < n; i++) {
> > var m:int = status.length;
> > var found:Boolean = false;
> > for (var j:int = 0; j < m; j++) {
> > if (status[j] == array[i].status){
> > found = true;
> > }
> > }
> > if (found == false) {
> > status.push(array[i].status);
> > }
> > }
> > status.sort();
> > ModelLocator.getInstance().statusArray =
> status;
> > }
> >
> > Thank You,
> > Tim Hoff
> >
>
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/