.NET 2строка array.Contains?
string[] myStrings = GetMyStrings();
string test = "testValue";
Как я могу проверить, если myStrings
содержит test
?
.NET 2строка array.Contains?
string[] myStrings = GetMyStrings();
string test = "testValue";
Как я могу проверить, если myStrings
содержит test
?
bool ContainsString(string[] arr, string testval)
{
if (arr == null)
return false;
for (int i = arr.Length-1; i >= 0; i--)
if (arr[i] == testval)
return true;
return false;
}
И у этого будет лучшее исполнение когда-либо. : P
внимательно прочитайте;) – serhio
@serhio. Я сделал. Трижды. Вы просите определить, содержится ли конкретная строка в массиве строк. Так вы это делаете. Если это не то, что вам нужно, исправьте свой вопрос. –
Просто измените массив из теста на myStrings, и этот ответ будет работать. Как это не работает для вас? –
Вместо того, чтобы использовать статический массив, вы могли бы использовать список:
List<string> myStrings = new List<string>(GetMyStrings());
if(myStrings.Contains("testValue"))
{
// Do Work
}
Я использую 'string [] letters =" a, b, c, d ".Split();'. Оптимально ли для такой элементарной функции использовать преобразования из массива в список? – serhio
@serhio - сначала код, при необходимости оптимизируйте позже. Если вы не создаете эти списки в больших масштабах, действительно не должно быть никаких проблем. –
Я предполагаю, что вы хотите проверить, если какие-либо элементы в массиве содержит определенное значение (тест). Если это так, вы хотите построить простой цикл. На самом деле, я думаю, вы должны click here.
Ниже приведен подход, совместимый с .NET 2.0. Использование Array.Find
вернет null, если значение не найдено.
C# подход
string[] myStrings = { "A", "B", "testValue" };
string test = "testValue";
string result = Array.Find(myStrings, delegate(string s) { return s == test; });
Console.WriteLine("Result: " + result);
Если вам нужно использовать регистронезависимы матч s.Equals(test, StringComparison.InvariantCultureIgnoreCase)
.
EDIT: с VB.NET 2.0 требуется больше усилий, поскольку оно не поддерживает анонимных делегатов. Вместо этого вам нужно будет добавить Function
и использовать AddressOf
, чтобы указать на него. Вам нужно будет установить testValue
как элемент или свойство, так как оно не будет передано методу предиката. В следующем примере я использую Array.Exists
.
VB.NET подход
' field or property '
Dim test As String = "testValue"
Sub Main
Dim myStrings As String() = { "A", "B", "testValue" }
Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue)
Console.WriteLine(result)
End Sub
' Predicate method '
Private Function ContainsValue(s As String) As Boolean
Return s = test
End Function
спасибо за решение VB, даже если мне нужен C# один, может быть, для людей VB будет полезно ... – serhio
Я пропустил требования 2.0 и VB. Это будет работать, конечно, но вызов Array.IndexOf может быть проще. –
@ Крис согласился. Это ближе к типу проверки «Содержит», но требует больше усилий, чем «IndexOf». –
В .NET 2.0, вы можете сделать следующее, если вы хотите индекс:
int index = Array.FindIndex(
myStrings,
delegate(string s) { return s.Equals(test); }
);
index
будет -1
если myStrings
не содержит test
,
Если вы просто хотите, чтобы проверить наличие:
bool exists = Array.Exists(
myStrings,
delegate(string s) { return s.Equals(test); }
);
Вот почти точно такой же вопрос на MSDN. Find String in String Array Как уже сказали, что вы на самом деле есть два варианта: 1) Используйте список для проще проверки 2) Loop через массив для поиска строки
Как об этом:
Sub Main
Dim myStrings(4) As String
myStrings(0) = "String 1"
myStrings(1) = "String 2"
myStrings(2) = "testValue"
myStrings(3) = "String 3"
myStrings(4) = "String 4"
Dim test As String = "testValue"
Dim isFound As Boolean = Array.IndexOf(myStrings, test) >= 0
If isFound Then
Console.WriteLine("Found it!")
End If
End Sub
Это должно работайте на .Net 2.0 и VB.Net.
Проблема OP заключается в том, что она не совместима с .NET 2.0 с lambdas. –
Если OP использует VS2008, то они могут использовать lambdas при настройке .NET 2.0. – onedaywhen
Я нашел изящный ответ на странице здесь http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html. Что вы должны делать в .NET 2.0 - передать в IList и вызвать метод Содержит.
(IList<string> mystrings).Contains(test);
Мысль Я хотел бы добавить еще один к соединению, первый доступный в .NET 3.5, я считаю:
Enumerable.Contains(myStrings.ToArray(), test)
. Это означает, что, используя System.Linq, вы можете написать 'myStrings.Contains (test)', поскольку 'Enumerable.Contains' является методом расширения. (BTW, версия .NET 3.5 использует тот же CLR, что и .NET версии 2.0, поэтому обычно это работает в «.NET 2.0».) –
vb.net и C# не тот же язык ... –
@ Крис Томпсон: это eddy556 .... – serhio
IQ тест? такой вопрос от парня ~ 4K?! (Использование .NET 2.0 не ясно) – Xaqron