Array.Exists<T>(T[], Predicate<T>) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen dizinin, belirtilen koşul tarafından tanımlanan koşullarla eşleşen öğeler içerip içermediğini belirler.
public:
generic <typename T>
static bool Exists(cli::array <T> ^ array, Predicate<T> ^ match);
public static bool Exists<T> (T[] array, Predicate<T> match);
static member Exists : 'T[] * Predicate<'T> -> bool
Public Shared Function Exists(Of T) (array As T(), match As Predicate(Of T)) As Boolean
Tür Parametreleri
- T
Dizinin öğelerini türü.
Parametreler
- array
- T[]
Aranacak tek boyutlu, sıfır tabanlı Array .
- match
- Predicate<T>
Predicate<T> Aranacak öğelerin koşullarını tanımlayan.
Döndürülenler
true
array
belirtilen koşul tarafından tanımlanan koşullarla eşleşen bir veya daha fazla öğe içeriyorsa; değilse, false
.
Özel durumlar
Örnekler
Aşağıdaki örnek, bir gezegenin belirli bir harfle başlayıp başlamadığını veya gezegenin verilen dizide bulunup bulunmadığını denetlemek için Exists lambda ifadelerini kullanan yöntemin eşleşme koşullarını belirtir.
using System;
namespace Example
{
class Program
{
static void Main(string[] args)
{
string[] planets = { "Mercury", "Venus",
"Earth", "Mars", "Jupiter",
"Saturn", "Uranus", "Neptune" };
Console.WriteLine("One or more planets begin with 'M': {0}",
Array.Exists(planets, element => element.StartsWith("M")));
Console.WriteLine("One or more planets begin with 'T': {0}",
Array.Exists(planets, element => element.StartsWith("T")));
Console.WriteLine("Is Pluto one of the planets? {0}",
Array.Exists(planets, element => element == "Pluto"));
}
}
}
// The example displays the following output:
// One or more planets begin with 'M': True
// One or more planets begin with 'T': False
// Is Pluto one of the planets? False
open System
let planets =
[| "Mercury"; "Venus"
"Earth"; "Mars"; "Jupiter"
"Saturn"; "Uranus"; "Neptune" |]
Array.Exists(planets, fun element -> element.StartsWith "M")
|> printfn "One or more planets begin with 'M': %O"
Array.Exists(planets, fun element -> element.StartsWith "T")
|> printfn "One or more planets begin with 'T': %O"
Array.Exists(planets, fun element -> element = "Pluto")
|> printfn "Is Pluto one of the planets? %O"
// The example displays the following output:
// One or more planets begin with 'M': True
// One or more planets begin with 'T': False
// Is Pluto one of the planets? False
Module Example
Public Sub Main()
Dim planets() As String = {"Mercury", "Venus",
"Earth", "Mars", "Jupiter",
"Saturn", "Uranus", "Neptune"}
Console.WriteLine("One or more planets begin with 'M': {0}",
Array.Exists(planets, Function(element)
Return element.StartsWith("M")
End Function))
Console.WriteLine("One or more planets begin with 'T': {0}",
Array.Exists(planets, Function(element)
Return element.StartsWith("T")
End Function))
Console.WriteLine("Is Pluto one of the planets? {0}",
Array.Exists(planets, Function(element)
Return element.Equals("Pluto")
End Function))
End Sub
End Module
' The example displays the following output:
' One or more planets begin with 'M': True
' One or more planets begin with 'T': False
' Is Pluto one of the planets? False
Aşağıdaki örnek, dize dizisindeki herhangi bir adın Exists belirtilen karakterle başlayıp başlamadığını belirtmek için yöntemini kullanır. Örnek, aranacak dizeyi sınıf oluşturucusununa geçirerek bir StringSearcher
nesnenin örneğini oluşturur. yöntemi, StringSearcher.StartsWith
temsilciyle aynı imzaya Predicate<T> sahiptir. Exists Yöntemi çağrıldığında, dizideki tüm öğeleri döndürene true
veya yinelene kadar dizinin her üyesi temsilciye geçirilir.
using System;
public class Example
{
public static void Main()
{
String[] names = { "Adam", "Adel", "Bridgette", "Carla",
"Charles", "Daniel", "Elaine", "Frances",
"George", "Gillian", "Henry", "Irving",
"James", "Janae", "Lawrence", "Miguel",
"Nicole", "Oliver", "Paula", "Robert",
"Stephen", "Thomas", "Vanessa",
"Veronica", "Wilberforce" };
Char[] charsToFind = { 'A', 'K', 'W', 'Z' };
foreach (var charToFind in charsToFind)
Console.WriteLine("One or more names begin with '{0}': {1}",
charToFind,
Array.Exists(names, (new StringSearcher(charToFind)).StartsWith));
}
}
public class StringSearcher
{
char firstChar;
public StringSearcher(char firstChar)
{
this.firstChar = char.ToUpper(firstChar);
}
public bool StartsWith(string s)
{
if (string.IsNullOrEmpty(s)) return false;
if(s.Substring(0, 1).ToUpper() == firstChar.ToString())
return true;
else
return false;
}
}
// The example displays the following output:
// One or more names begin with 'A': True
// One or more names begin with 'K': False
// One or more names begin with 'W': True
// One or more names begin with 'Z': False
open System
type StringSearcher(firstChar) =
member _.StartsWith(s) =
if String.IsNullOrEmpty s then
false
else
s.Substring(0, 1).ToUpper() = string firstChar
let names =
[| "Adam"; "Adel"; "Bridgette"; "Carla";
"Charles"; "Daniel"; "Elaine"; "Frances"
"George"; "Gillian"; "Henry"; "Irving"
"James"; "Janae"; "Lawrence"; "Miguel"
"Nicole"; "Oliver"; "Paula"; "Robert"
"Stephen"; "Thomas"; "Vanessa"
"Veronica"; "Wilberforce" |]
let charsToFind = [ 'A'; 'K'; 'W'; 'Z' ]
for char in charsToFind do
let exists = Array.Exists(names, fun x -> StringSearcher(char).StartsWith x)
// let exists = Array.exists (StringSearcher(char).StartsWith) names
printfn $"One or more names begin with '{char}': {exists}"
// The example displays the following output:
// One or more names begin with 'A': True
// One or more names begin with 'K': False
// One or more names begin with 'W': True
// One or more names begin with 'Z': False
Module Example
Public Sub Main()
Dim names() As String = { "Adam", "Adel", "Bridgette", "Carla",
"Charles", "Daniel", "Elaine", "Frances",
"George", "Gillian", "Henry", "Irving",
"James", "Janae", "Lawrence", "Miguel",
"Nicole", "Oliver", "Paula", "Robert",
"Stephen", "Thomas", "Vanessa",
"Veronica", "Wilberforce" }
Dim charsToFind() As Char = { "A"c, "K"c, "W"c, "Z"c }
For Each charToFind In charsToFind
Console.WriteLine("One or more names begin with '{0}': {1}",
charToFind,
Array.Exists(names, AddressOf (New StringSearcher(charToFind)).StartsWith))
Next
End Sub
End Module
Public Class StringSearcher
Dim firstChar As Char
Public Sub New(firstChar As Char)
Me.firstChar = Char.ToUpper(firstChar)
End Sub
Public Function StartsWith(s As String) As Boolean
If String.IsNullOrEmpty(s) Then Return False
If s.Substring(0, 1).ToUpper = firstChar Then
Return True
Else
Return False
End If
End Function
End Class
' The example displays the following output:
' One or more names begin with 'A': True
' One or more names begin with 'K': False
' One or more names begin with 'W': True
' One or more names begin with 'Z': False
İmzası temsilcininkine karşılık gelen bir yöntemi açıkça tanımlamak yerine bir lambda ifadesi de kullanabilirsiniz. Aşağıdaki örnek, sınıfını StringSearcher
ve StartsWith
yöntemini bir lambda ifadesiyle değiştirir.
using System;
public class Example
{
public static void Main()
{
String[] names = { "Adam", "Adel", "Bridgette", "Carla",
"Charles", "Daniel", "Elaine", "Frances",
"George", "Gillian", "Henry", "Irving",
"James", "Janae", "Lawrence", "Miguel",
"Nicole", "Oliver", "Paula", "Robert",
"Stephen", "Thomas", "Vanessa",
"Veronica", "Wilberforce" };
Char[] charsToFind = { 'A', 'K', 'W', 'Z' };
foreach (var charToFind in charsToFind)
Console.WriteLine("One or more names begin with '{0}': {1}",
charToFind,
Array.Exists(names,
s => { if (string.IsNullOrEmpty(s))
return false;
if (s.Substring(0, 1).ToUpper() == charToFind.ToString())
return true;
else
return false;
} ));
}
}
// The example displays the following output:
// One or more names begin with 'A': True
// One or more names begin with 'K': False
// One or more names begin with 'W': True
// One or more names begin with 'Z': False
open System
let names =
[| "Adam"; "Adel"; "Bridgette"; "Carla";
"Charles"; "Daniel"; "Elaine"; "Frances"
"George"; "Gillian"; "Henry"; "Irving"
"James"; "Janae"; "Lawrence"; "Miguel"
"Nicole"; "Oliver"; "Paula"; "Robert"
"Stephen"; "Thomas"; "Vanessa"
"Veronica"; "Wilberforce" |]
let charsToFind = [ 'A'; 'K'; 'W'; 'Z' ]
for char in charsToFind do
let exists =
Array.Exists(names, fun s ->
if String.IsNullOrEmpty s then false
else s.Substring(0, 1).ToUpper() = string char)
printfn $"One or more names begin with '{char}': {exists}"
// The example displays the following output:
// One or more names begin with 'A': True
// One or more names begin with 'K': False
// One or more names begin with 'W': True
// One or more names begin with 'Z': False
Module Example
Public Sub Main()
Dim names() As String = { "Adam", "Adel", "Bridgette", "Carla",
"Charles", "Daniel", "Elaine", "Frances",
"George", "Gillian", "Henry", "Irving",
"James", "Janae", "Lawrence", "Miguel",
"Nicole", "Oliver", "Paula", "Robert",
"Stephen", "Thomas", "Vanessa",
"Veronica", "Wilberforce" }
Dim charsToFind() As Char = { "A"c, "K"c, "W"c, "Z"c }
For Each charToFind In charsToFind
Console.WriteLine("One or more names begin with '{0}': {1}",
charToFind,
Array.Exists(names, Function(s)
If String.IsNullOrEmpty(s) Then Return False
If s.Substring(0, 1).ToUpper = charToFind Then
Return True
Else
Return False
End If
End Function ))
Next
End Sub
End Module
' The example displays the following output:
' One or more names begin with 'A': True
' One or more names begin with 'K': False
' One or more names begin with 'W': True
' One or more names begin with 'Z': False
Açıklamalar
Predicate<T>, nesnesine geçirilen nesnenin temsilcide tanımlanan koşullarla eşleşip eşleşmediğini döndüren true
bir yöntemin temsilcisidir. öğeleri array
tek tek öğesine Predicate<T>geçirilir ve bir eşleşme bulunduğunda işleme durdurulur.
Not
C# ve Visual Basic'da temsilcinin Predicate<T> açıkça oluşturulması gerekmez. Bu diller doğru temsilciyi bağlamdan çıkarır ve otomatik olarak oluşturur. F# dilinde işlevler ve lambda ifadeleri örtük olarak dönüştürülür.
Bu yöntem bir O(n
) işlemidir ve burada n
değeridir Length array
.