C# ArrayList BinarySearch(Object)
Description
ArrayList BinarySearch(Object)
searches the entire
sorted ArrayList for an element using the default comparer and returns the
zero-based index of the element.
Syntax
ArrayList.BinarySearch(Object)
has the following syntax.
public virtual int BinarySearch(
Object value
)
Parameters
ArrayList.BinarySearch(Object)
has the following parameters.
value
- The Object to locate. The value can be null.
Returns
ArrayList.BinarySearch(Object)
method returns The zero-based index of value in the sorted ArrayList, if value is found;
otherwise, a negative number, which is the bitwise complement of the index
of the next element that is larger than value or, if there is no larger element,
the bitwise complement of Count.
Example
using System;/*from w w w . j av a 2 s .co m*/
using System.Collections;
class Album : IComparable, ICloneable {
private string _Title;
private string _Artist;
public Album(string artist, string title) {
_Artist = artist;
_Title = title;
}
public string Title {
get {
return _Title;
}
set {
_Title = value;
}
}
public string Artist {
get {
return _Artist;
}
set {
_Artist = value;
}
}
public override string ToString() {
return _Artist + ",\t" + _Title;
}
public int CompareTo(object o) {
Album other = o as Album;
if (other == null)
throw new ArgumentException();
if (_Artist != other._Artist)
return _Artist.CompareTo(other._Artist);
else
return _Title.CompareTo(other._Title);
}
public object Clone() {
return new Album(_Artist, _Title);
}
}
class TitleComparer : IComparer {
public int Compare(object l, object r) {
Album left = l as Album;
Album right = r as Album;
if ((left == null) || (right == null))
throw new ArgumentException();
if (left.Title != right.Title)
return left.Title.CompareTo(right.Title);
else
return left.Artist.CompareTo(right.Artist);
}
}
class Class1 {
static void Main(string[] args) {
ArrayList arr = new ArrayList();
arr.Add(new Album("G", "A"));
arr.Add(new Album("B", "G"));
arr.Add(new Album("S", "A"));
arr.Sort();
try {
foreach (Album a in arr) {
Console.WriteLine(a);
}
} catch (System.InvalidCastException e) {
}
arr.Sort(new TitleComparer());
foreach (Album a in arr) {
Console.WriteLine(a);
}
Album l = new Album("L", "G");
arr.Sort();
int index = arr.BinarySearch(l);
Console.WriteLine(index.ToString());
arr.Sort(new TitleComparer());
index = arr.BinarySearch(l, new TitleComparer());
Console.WriteLine(index.ToString());
}
}
The code above generates the following result.