ArrayList.BinarySearch Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Bináris keresési algoritmus használatával megkeres egy adott elemet a rendezésben ArrayList vagy annak egy részében.
Túlterhelések
| Name | Description |
|---|---|
| BinarySearch(Object) |
Az elem teljes rendezése ArrayList az alapértelmezett összehasonlító használatával történik, és az elem nulla alapú indexét adja vissza. |
| BinarySearch(Object, IComparer) |
A megadott összehasonlító használatával a teljes rendezésben ArrayList keres egy elemet, és visszaadja az elem nulla alapú indexét. |
| BinarySearch(Int32, Int32, Object, IComparer) |
A megadott összehasonlító használatával keres egy elem sorba rendezett ArrayList elemtartományát, és visszaadja az elem nulla alapú indexét. |
BinarySearch(Object)
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
Az elem teljes rendezése ArrayList az alapértelmezett összehasonlító használatával történik, és az elem nulla alapú indexét adja vissza.
public:
virtual int BinarySearch(System::Object ^ value);
public virtual int BinarySearch(object value);
public virtual int BinarySearch(object? value);
abstract member BinarySearch : obj -> int
override this.BinarySearch : obj -> int
Public Overridable Function BinarySearch (value As Object) As Integer
Paraméterek
Válaszok
A rendezés nulla alapú indexe value , ha ArrayList található; ellenkező esetben negatív szám, amely a következő elem indexének bitenkénti kiegészítése, amely nagyobb, mint value vagy ha nincs nagyobb elem, akkor a bitenkénti kiegészítésevalue.Count
Kivételek
Sem az interfész implementálásának valueArrayList elemei nemIComparable.
value nem ugyanaz a típus, mint a ArrayList.
Példák
Az alábbi példakód bemutatja, BinarySearch hogyan kereshet meg egy adott objektumot a ArrayListfájlban.
using System;
using System.Collections;
public class SamplesArrayList {
public static void Main() {
// Creates and initializes a new ArrayList. BinarySearch requires
// a sorted ArrayList.
ArrayList myAL = new ArrayList();
for ( int i = 0; i <= 4; i++ )
myAL.Add( i*2 );
// Displays the ArrayList.
Console.WriteLine( "The int ArrayList contains the following:" );
PrintValues( myAL );
// Locates a specific object that does not exist in the ArrayList.
Object myObjectOdd = 3;
FindMyObject( myAL, myObjectOdd );
// Locates an object that exists in the ArrayList.
Object myObjectEven = 6;
FindMyObject( myAL, myObjectEven );
}
public static void FindMyObject( ArrayList myList, Object myObject ) {
int myIndex=myList.BinarySearch( myObject );
if ( myIndex < 0 )
Console.WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex );
else
Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex );
}
public static void PrintValues( IEnumerable myList ) {
foreach ( Object obj in myList )
Console.Write( " {0}", obj );
Console.WriteLine();
}
}
/*
This code produces the following output.
The int ArrayList contains the following:
0 2 4 6 8
The object to search for (3) is not found. The next larger object is at index 2.
The object to search for (6) is at index 3.
*/
Imports System.Collections
Public Class SamplesArrayList
Public Shared Sub Main()
' Creates and initializes a new ArrayList. BinarySearch requires
' a sorted ArrayList.
Dim myAL As New ArrayList()
Dim i As Integer
For i = 0 To 4
myAL.Add(i * 2)
Next i
' Displays the ArrayList.
Console.WriteLine("The Int32 ArrayList contains the following:")
PrintValues(myAL)
' Locates a specific object that does not exist in the ArrayList.
Dim myObjectOdd As Object = 3
FindMyObject(myAL, myObjectOdd)
' Locates an object that exists in the ArrayList.
Dim myObjectEven As Object = 6
FindMyObject(myAL, myObjectEven)
End Sub
Public Shared Sub FindMyObject(myList As ArrayList, myObject As Object)
Dim myIndex As Integer = myList.BinarySearch(myObject)
If myIndex < 0 Then
Console.WriteLine("The object to search for ({0}) is not found. " _
+ "The next larger object is at index {1}.", myObject, _
Not myIndex)
Else
Console.WriteLine("The object to search for ({0}) is at index " _
+ "{1}.", myObject, myIndex)
End If
End Sub
Public Shared Sub PrintValues(myList As IEnumerable)
Dim obj As [Object]
For Each obj In myList
Console.Write(" {0}", obj)
Next obj
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' The Int32 ArrayList contains the following:
' 0 2 4 6 8
' The object to search for (3) is not found. The next larger object is at index 2.
' The object to search for (6) is at index 3.
Megjegyzések
Az value összehasonlításhoz használt felületet a paraméternek és minden ArrayList elemének implementálnia IComparable kell. Az elemeket ArrayList már növekvő értékben kell rendezni a végrehajtás által IComparable meghatározott rendezési sorrend szerint, ellenkező esetben az eredmény helytelen lehet.
Bármely típussal való összehasonlítása null engedélyezett, és nem hoz létre kivételt a használat során IComparable. Rendezéskor null a rendszer minden más objektumnál kisebbnek számít.
Ha a ArrayList metódus több azonos értékű elemet tartalmaz, a metódus csak az egyik előfordulást adja vissza, és az előfordulások bármelyikét visszaadhatja, nem feltétlenül az elsőt.
Ha a ArrayList metódus nem tartalmazza a megadott értéket, a metódus negatív egész számot ad vissza. A bitenkénti kiegészítési műveletet (~) alkalmazhatja erre a negatív egész számra, hogy lekérje a keresési értéknél nagyobb első elem indexét. Az érték ArrayListbeszúrásakor ezt az indexet kell használni beszúrási pontként a rendezési sorrend fenntartásához.
Ez a metódus egy O(log n) művelet, ahol n van Count.
Lásd még
A következőre érvényes:
BinarySearch(Object, IComparer)
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
A megadott összehasonlító használatával a teljes rendezésben ArrayList keres egy elemet, és visszaadja az elem nulla alapú indexét.
public:
virtual int BinarySearch(System::Object ^ value, System::Collections::IComparer ^ comparer);
public virtual int BinarySearch(object value, System.Collections.IComparer comparer);
public virtual int BinarySearch(object? value, System.Collections.IComparer? comparer);
abstract member BinarySearch : obj * System.Collections.IComparer -> int
override this.BinarySearch : obj * System.Collections.IComparer -> int
Public Overridable Function BinarySearch (value As Object, comparer As IComparer) As Integer
Paraméterek
- comparer
- IComparer
Az IComparer elemek összehasonlítása során használandó implementáció.
-vagy-
null az egyes elemek implementációját IComparable tartalmazó alapértelmezett összehasonlító használata.
Válaszok
A rendezés nulla alapú indexe value , ha ArrayList található; ellenkező esetben negatív szám, amely a következő elem indexének bitenkénti kiegészítése, amely nagyobb, mint value vagy ha nincs nagyobb elem, akkor a bitenkénti kiegészítésevalue.Count
Kivételek
comparerés sem null az value interfész megvalósításának ArrayListIComparable elemei.
comparer nem null azonos típusú, és value nem azonos a .-nak az ArrayListelemeiével.
Példák
Az alábbi példa színes állatokat ArrayList hoz létre. A megadott IComparer függvény elvégzi a bináris keresés sztring-összehasonlítását. Az iteratív keresés és a bináris keresés eredményei is megjelennek.
using System;
using System.Collections;
public class SimpleStringComparer : IComparer
{
int IComparer.Compare(object x, object y)
{
string cmpstr = (string)x;
return cmpstr.CompareTo((string)y);
}
}
public class MyArrayList : ArrayList
{
public static void Main()
{
// Creates and initializes a new ArrayList.
MyArrayList coloredAnimals = new MyArrayList();
coloredAnimals.Add("White Tiger");
coloredAnimals.Add("Pink Bunny");
coloredAnimals.Add("Red Dragon");
coloredAnimals.Add("Green Frog");
coloredAnimals.Add("Blue Whale");
coloredAnimals.Add("Black Cat");
coloredAnimals.Add("Yellow Lion");
// BinarySearch requires a sorted ArrayList.
coloredAnimals.Sort();
// Compare results of an iterative search with a binary search
int index = coloredAnimals.IterativeSearch("White Tiger");
Console.WriteLine("Iterative search, item found at index: {0}", index);
index = coloredAnimals.BinarySearch("White Tiger", new SimpleStringComparer());
Console.WriteLine("Binary search, item found at index: {0}", index);
}
public int IterativeSearch(object finditem)
{
int index = -1;
for (int i = 0; i < this.Count; i++)
{
if (finditem.Equals(this[i]))
{
index = i;
break;
}
}
return index;
}
}
//
// This code produces the following output.
//
// Iterative search, item found at index: 5
// Binary search, item found at index: 5
//
Imports System.Collections
Public Class SimpleStringComparer
Implements IComparer
Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
Dim cmpstr As String = CType(x, String)
Return cmpstr.CompareTo(CType(y, String))
End Function
End Class
Public Class MyArrayList
Inherits ArrayList
Public Shared Sub Main()
' Creates and initializes a new ArrayList.
Dim coloredAnimals As New MyArrayList()
coloredAnimals.Add("White Tiger")
coloredAnimals.Add("Pink Bunny")
coloredAnimals.Add("Red Dragon")
coloredAnimals.Add("Green Frog")
coloredAnimals.Add("Blue Whale")
coloredAnimals.Add("Black Cat")
coloredAnimals.Add("Yellow Lion")
' BinarySearch requires a sorted ArrayList.
coloredAnimals.Sort()
' Compare results of an iterative search with a binary search
Dim index As Integer = coloredAnimals.IterativeSearch("White Tiger")
Console.WriteLine("Iterative search, item found at index: {0}", index)
index = coloredAnimals.BinarySearch("White Tiger", New SimpleStringComparer())
Console.WriteLine("Binary search, item found at index: {0}", index)
End Sub
Public Function IterativeSearch(finditem As Object) As Integer
Dim index As Integer = -1
For i As Integer = 0 To MyClass.Count - 1
If finditem.Equals(MyClass.Item(i))
index = i
Exit For
End If
Next i
Return index
End Function
End Class
'
' This code produces the following output.
'
' Iterative search, item found at index: 5
' Binary search, item found at index: 5
'
Megjegyzések
A összehasonlító testre szabja az elemek összehasonlításának módját. Használhat például egy példányt CaseInsensitiveComparer összehasonlítóként a kis- és nagybetűk érzéketlen sztringkereséséhez.
Ha comparer meg van adva, a rendszer a ArrayList megadott értékhez hasonlítja az elemeket a megadott IComparer implementációval. Az elemeket ArrayList már növekvő értékben kell rendezni a megadott comparerrendezési sorrend szerint; ellenkező esetben az eredmény helytelen lehet.
Ha comparer igen null, az összehasonlítás az IComparable elem vagy a megadott érték által biztosított implementációval történik. Az elemeket ArrayList már növekvő értékben kell rendezni a végrehajtás által IComparable meghatározott rendezési sorrend szerint, ellenkező esetben az eredmény helytelen lehet.
Bármely típussal való összehasonlítása null engedélyezett, és nem hoz létre kivételt a használat során IComparable. Rendezéskor null a rendszer minden más objektumnál kisebbnek számít.
Ha a ArrayList metódus több azonos értékű elemet tartalmaz, a metódus csak az egyik előfordulást adja vissza, és az előfordulások bármelyikét visszaadhatja, nem feltétlenül az elsőt.
Ha a ArrayList metódus nem tartalmazza a megadott értéket, a metódus negatív egész számot ad vissza. A bitenkénti kiegészítési műveletet (~) alkalmazhatja erre a negatív egész számra, hogy lekérje a keresési értéknél nagyobb első elem indexét. Az érték ArrayListbeszúrásakor ezt az indexet kell használni beszúrási pontként a rendezési sorrend fenntartásához.
Ez a metódus egy O(log n) művelet, ahol n van Count.
Lásd még
A következőre érvényes:
BinarySearch(Int32, Int32, Object, IComparer)
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
- Forrás:
- ArrayList.cs
A megadott összehasonlító használatával keres egy elem sorba rendezett ArrayList elemtartományát, és visszaadja az elem nulla alapú indexét.
public:
virtual int BinarySearch(int index, int count, System::Object ^ value, System::Collections::IComparer ^ comparer);
public virtual int BinarySearch(int index, int count, object value, System.Collections.IComparer comparer);
public virtual int BinarySearch(int index, int count, object? value, System.Collections.IComparer? comparer);
abstract member BinarySearch : int * int * obj * System.Collections.IComparer -> int
override this.BinarySearch : int * int * obj * System.Collections.IComparer -> int
Public Overridable Function BinarySearch (index As Integer, count As Integer, value As Object, comparer As IComparer) As Integer
Paraméterek
- index
- Int32
A keresendő tartomány nulla alapú kezdőindexe.
- count
- Int32
A keresendő tartomány hossza.
- comparer
- IComparer
Az IComparer elemek összehasonlítása során használandó implementáció.
-vagy-
null az egyes elemek implementációját IComparable tartalmazó alapértelmezett összehasonlító használata.
Válaszok
A rendezés nulla alapú indexe value , ha ArrayList található; ellenkező esetben negatív szám, amely a következő elem indexének bitenkénti kiegészítése, amely nagyobb, mint value vagy ha nincs nagyobb elem, akkor a bitenkénti kiegészítésevalue.Count
Kivételek
index és count ne jelölje az érvényes tartományt a ArrayList.
-vagy-
comparerés sem null az value interfész megvalósításának ArrayListIComparable elemei.
comparer nem null azonos típusú, és value nem azonos a .-nak az ArrayListelemeiével.
Megjegyzések
A összehasonlító testre szabja az elemek összehasonlításának módját. Használhat például egy példányt CaseInsensitiveComparer összehasonlítóként a kis- és nagybetűk érzéketlen sztringkereséséhez.
Ha comparer meg van adva, a rendszer a ArrayList megadott értékhez hasonlítja az elemeket a megadott IComparer implementációval. Az elemeket ArrayList már növekvő értékben kell rendezni a megadott comparerrendezési sorrend szerint; ellenkező esetben az eredmény helytelen lehet.
Ha comparer igen null, az összehasonlítás az IComparable elem vagy a megadott érték által biztosított implementációval történik. Az elemeket ArrayList már növekvő értékben kell rendezni a végrehajtás által IComparable meghatározott rendezési sorrend szerint, ellenkező esetben az eredmény helytelen lehet.
Bármely típussal való összehasonlítása null engedélyezett, és nem hoz létre kivételt a használat során IComparable. Rendezéskor null a rendszer minden más objektumnál kisebbnek számít.
Ha a ArrayList metódus több azonos értékű elemet tartalmaz, a metódus csak az egyik előfordulást adja vissza, és az előfordulások bármelyikét visszaadhatja, nem feltétlenül az elsőt.
Ha a ArrayList metódus nem tartalmazza a megadott értéket, a metódus negatív egész számot ad vissza. A bitenkénti kiegészítési műveletet (~) alkalmazhatja erre a negatív egész számra, hogy lekérje a keresési értéknél nagyobb első elem indexét. Az érték ArrayListbeszúrásakor ezt az indexet kell használni beszúrási pontként a rendezési sorrend fenntartásához.
Ez a metódus egy O(log n) művelet, ahol n van count.