فلاش متصفح التطبيق أكشن:كيفية استخراج مجموعة من الكائنات من مجموعة فرزها *كفاءة*?

StackOverflow https://stackoverflow.com/questions/2133252

سؤال

لدي متصفح نشرها فلاش التطبيق (لا هواء التطبيق مع إمكانية الوصول إلى SQLConnection) وأنه يجلب سلمان النتائج من الخادم البعيد عن طريق HTTPService.

أنا بحاجة إلى استخراج مجموعات فرعية من عاد resultset ، صفيف من الكائنات ، بكفاءة.Mutltiple المكالمات من خلال سحابة إلى النهاية الخلفية لن تفعل.كل شيء يجب أن يحدث من جانب العميل.

هل هناك أي جمع الصف في فليكس أكشن التي يمكن فرز مجموعة من الكائنات من قبل واحدة من خصائص الكائنات جميعا في المشترك ، مثل مجموعة sortOn طريقة ثم أيضا يوفر البحث الثنائية طريقة يمكن استخراج مجموعة من الكائنات من فرز نسخة من مجموعة دون الحاجة إلى زيارة كل عنصر في مجموعة ومقارنة?

E. g.إذا كان لدي مجموعة من الكائنات و كل كائن كان الرمز البريدي مكان الإقامة اسم مكان الإقامة ، أود أن تكون قادرة على استخراج كافة الكائنات مع الرمز البريدي = 10015 من نسخة من المصفوفة الأصلية حيث نسخ تم فرزها على الرمز البريدي.

شكرا

هل كانت مفيدة؟

المحلول

لست على دراية بأي مجموعة في ثناياه عوامل تقوم بإجراء بحث ثنائي. ولكن يمكنك فرز الصفيف باستخدام Array::sortOn الطريقة واكتب التعليمات البرمجية الخاصة بك للبحث الثنائي. يمكنك أن تبدأ بشيء مثل:

private static search(array:Array, prop:String, value:Object, 
        frm:Number, to:Number):Number
{
  if(to - frm <= 1)
  {
    if(array[frm][prop] == value)
      return frm;
    if(array[to][prop] == value)
      return to;
    return -1;
  }
  var mid:int = (to + frm) / 2;
  //use a compare function that returns -1, 0, +1 based on their relative values
  if(array[mid][prop] == value)
    return mid;
  if(array[mid][prop] > value)
    return search(array, prop, value, frm, mid - 1);
  return search(array, prop, value, mid + 1, to);
}
array.sortOn("zip", Array.NUMERIC);
var index:Number = ClassName.search(array, "zip", "10015", 0, array.length - 1);

يمكنك الآن البحث لأعلى ولأسفل من قيمة الفهرس التي تم إرجاعها (إذا كانت! = -1) واسترداد المجموعة الفرعية بأكملها بقيمة ZIP = 10015.


راجع للشغل ، إذا كانت البيانات كبيرة جدًا بحيث لا يمكن البحث فيها في جانب العميل باستخدام الطرق العادية ، ألا يكون من الضروري أن تكون عنق الزجاجة النطاق الترددي أيضًا؟

نصائح أخرى

هل يمكن استخدام array.sortOn() ثم أعاد مرة واحدة على فرز مجموعة (بدءا من 0):عند الوصول إلى المباراة الأولى ، بدء عودة العناصر كما يمكنك تكرار الأمام حتى تتوقف عن مطابقة.هذا يعود كامل فرعية من عناصر مطابقة ، في المتوسط سوف تكون زيارة فقط نصف المصفوفة الأصلية (بعد الفرز).

(إذا كانت هذه هي بطيئة جدا ، قد يكون أسرع ، اعتمادا على البيانات الخاصة بك, استخدام البحث الثنائية للحصول على المباراة ، ثم تكرار باستمرار حتى تتوقف عن مطابقة أي العثور على أول مباراة في أمر تعيين ، ثم تبدأ العودة من العناصر كما يمكنك تكرار صعودا حتى نفاد من المباريات...ولكن توفير الوقت قد تكون هامشية بالمقارنة مع الوقت اللازم للقيام الأصلي sortOn())

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top