ما هو روبي (1.8.7) التناظرية إلى SortedDictionary في C#/.الشبكة ؟

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

  •  29-09-2019
  •  | 
  •  

سؤال

أنا في حاجة إلى الاستمرار القيم في فرز التجزئة في روبي (1.8.7).ما هي البيانات structed تناسب أفضل ؟

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

المحلول

لا يوجد شيء في المكتبة الأساسية أو المكتبة القياسية الآن ، والتي تناسب فاتورتك.

هناك هو, ، ومع ذلك، طلب ميزة لإضافة تطبيق أحمر/أسود شجرة إلى Ruby 1.9.3/2.0.

إذا كنت قادرًا على إجبار المستخدمين على استخدامك فقط xruby أو جروبي, ، يمكنك فقط استخدام أحد تطبيقات Java java.util.SortedMap<K, V> مثل java.util.TreeMap<K, V>.

إذا كنت قادرًا على إجبار المستخدمين على استخدامك فقط ruby.net أو Ironruby, ، يمكنك فقط استخدام .NET's System.Collections.Generic.SortedDictionary<TKey, TValue>.

إذا كنت قادرًا على إجبار المستخدمين على استخدام التصوير بالرنين المغناطيسي أو YARV ، فيمكنك استخدام Ruby/RBTree مكتبة. قد تعمل أيضًا روبينيوس أو JRuby 1.6 الذي لم يتم إصداره لك. لاحظ أنه يبدو أن هناك شوكات محدثة متعددة مستقلة لتلك المكتبة في البرية. هذا ليس واضحًا ، وهو أحد هؤلاء هو الأحدث و/أو الأفضل الحفاظ عليه.

ال فقط الحل الذي أعرفه مضمون أن يكون محمولًا ، هو مشروع خوارزميات وحاويات Kanwei Li GSOC 2008, ، الذي يحتوي في الواقع على اثنين من التطبيقات لمجموعة مصنفة ومفاسدة: Containers::RBTreeMap بناء على شجرة حمراء/سوداء و Containers::SplayTreeMap بناءً على شجرة شديدة.

نصائح أخرى

قد تضطر إلى دحرج هذا بنفسك ، إذا لم يكن لدى أي شخص آخر اقتراح أفضل.

class SortedHash
  def initialize
    @data = []
  end

  def [](k)
    @data.find {|kp,vp| kp == k}.last
  end

  def []=(k, v)
    @data.reject! {|kp,vp| kp == k}
    @data << [k, v]
    @data = @data.sort_by {|kp,vp| kp}
  end

  def each(&b)
    @data.each(&b)
  end
end

sh = SortedHash.new
sh[32] = "no"
sh[1] = "later"
sh[99] = "after"

sh.each do |k,v|
  p [k,v]
end

انتاج:

[1, "later"]
[32, "no"]
[99, "after"]

يتم فرز Array بواسطة Keys ، بحيث يمكن أن تكون من أي مكالمة وتحتاج فقط إلى تحديد مشغلي المقارنة عليها.

استخدام نفس الدرجة في c# SortedDictionary :

SortedDictionary keyValues = new SortedDictionary();

        keyValues.Add(5,"sample5");
        keyValues.Add(2, "sample2");
        keyValues.Add(6, "sample6");
        keyValues.Add(8, "sample8");
        keyValues.Add(9, "sample9");
        keyValues.Add(1, "sample1");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top