[C#] C#使用二分查找法在ArrayList中查找数据 →→→→→进入此内容的聊天室

来自 , 2019-09-27, 写在 C#, 查看 139 次.
URL http://www.code666.cn/view/969ebecd
  1. using System;
  2.  
  3. using System.Collections;
  4.  
  5. class Album : IComparable, ICloneable {
  6.  
  7.     private string _Title;
  8.  
  9.     private string _Artist;
  10.  
  11.  
  12.     public Album(string artist, string title) {
  13.  
  14.         _Artist = artist;
  15.  
  16.         _Title = title;
  17.  
  18.     }
  19.  
  20.  
  21.     public string Title {
  22.  
  23.         get {
  24.  
  25.             return _Title;
  26.  
  27.         }
  28.  
  29.         set {
  30.  
  31.             _Title = value;
  32.  
  33.         }
  34.  
  35.     }
  36.  
  37.  
  38.     public string Artist {
  39.  
  40.         get {
  41.  
  42.             return _Artist;
  43.  
  44.         }
  45.  
  46.         set {
  47.  
  48.             _Artist = value;
  49.  
  50.         }
  51.  
  52.     }
  53.  
  54.     public override string ToString() {
  55.  
  56.         return _Artist + ",t" + _Title;
  57.  
  58.     }
  59.  
  60.     public int CompareTo(object o) {
  61.  
  62.         Album other = o as Album;
  63.  
  64.         if (other == null)
  65.  
  66.             throw new ArgumentException();
  67.  
  68.         if (_Artist != other._Artist)
  69.  
  70.             return _Artist.CompareTo(other._Artist);
  71.  
  72.         else
  73.  
  74.             return _Title.CompareTo(other._Title);
  75.  
  76.     }
  77.  
  78.     public object Clone() {
  79.  
  80.         return new Album(_Artist, _Title);
  81.  
  82.     }
  83.  
  84. }
  85.  
  86.  
  87. class TitleComparer : IComparer {
  88.  
  89.     public int Compare(object l, object r) {
  90.  
  91.         Album left = l as Album;
  92.  
  93.         Album right = r as Album;
  94.  
  95.         if ((left == null) || (right == null))
  96.  
  97.             throw new ArgumentException();
  98.  
  99.         if (left.Title != right.Title)
  100.  
  101.             return left.Title.CompareTo(right.Title);
  102.  
  103.         else
  104.  
  105.             return left.Artist.CompareTo(right.Artist);
  106.  
  107.     }
  108.  
  109. }
  110.  
  111. class Class1 {
  112.  
  113.     static void Main(string[] args) {
  114.  
  115.         ArrayList arr = new ArrayList();
  116.  
  117.  
  118.         arr.Add(new Album("G", "A"));
  119.  
  120.         arr.Add(new Album("B", "G"));
  121.  
  122.         arr.Add(new Album("S", "A"));
  123.  
  124.  
  125.         arr.Sort();
  126.  
  127.  
  128.         try {
  129.  
  130.             foreach (Album a in arr) {
  131.  
  132.                 Console.WriteLine(a);
  133.  
  134.             }
  135.  
  136.         } catch (System.InvalidCastException e) {
  137.  
  138.         }
  139.  
  140.  
  141.         arr.Sort(new TitleComparer());
  142.  
  143.         foreach (Album a in arr) {
  144.  
  145.             Console.WriteLine(a);
  146.  
  147.         }
  148.  
  149.  
  150.         Album l = new Album("L", "G");
  151.  
  152.         arr.Sort();
  153.  
  154.         int index = arr.BinarySearch(l);
  155.  
  156.         Console.WriteLine(index.ToString());
  157.  
  158.         arr.Sort(new TitleComparer());
  159.  
  160.         index = arr.BinarySearch(l, new TitleComparer());
  161.  
  162.         Console.WriteLine(index.ToString());
  163.  
  164.     }
  165.  
  166. }
  167. //csharp/7675

回复 "C#使用二分查找法在ArrayList中查找数据"

这儿你可以回复上面这条便签

captcha