检查一个值是否在数组中(C #)

如何检查一个值是否在 C # 的数组中?

比如,我想创建一个包含打印机名称列表的数组。

它们将被提供给一个方法,该方法将依次查看每个字符串,如果该字符串与数组中的值相同,则执行该操作。

例如:

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}

这些是打印机的名称,它们被提供给 PrinterSetup 方法。

PrinterSetup 看起来像这样(一些伪代码) :

public void PrinterSetup(printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}

如何以 C # 能识别的方式格式化 if (printer == "jupiter")

479921 次浏览

添加必要的名称空间

using System.Linq;

然后可以使用 linqContains()方法

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
if(printer.Contains("jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}

你只是在你的方法中遗漏了一些东西:

public void PrinterSetup(string printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
}

只要加上 string就行了。

像这样吗?

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
PrinterSetup(printer);


// redefine PrinterSetup this way:
public void PrinterSetup(string[] printer)
{
foreach (p in printer.Where(c => c == "jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
}

不是很清楚你的问题是什么,但听起来你想要这样的东西:

    List<string> printer = new List<string>( new [] { "jupiter", "neptune", "pangea", "mercury", "sonic" } );


if( printer.Exists( p => p.Equals( "jupiter" ) ) )
{
...
}
    public static bool Contains(Array a, object val)
{
return Array.IndexOf(a, val) != -1;
}
string[] array = { "cat", "dot", "perls" };


// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perls");
bool b = Array.Exists(array, element => element == "python");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));


// Display bools.
Console.WriteLine(a); // true
Console.WriteLine(b); // false
Console.WriteLine(c); // true
Console.WriteLine(d); // false

在文件的顶部添加 using System.Linq;,然后你可以这样做:

if ((new [] {"foo", "bar", "baaz"}).Contains("bar"))
{


}

为了提高查找性能,请考虑使用 HashSet<T>:

这个方法是一个 O (1)运算。

HashSet<T>.Contains方法(T) ,MSDN

例如:

class PrinterInstaller
{
private static readonly HashSet<string> PrinterNames = new HashSet<string>
{
"jupiter", "neptune", "pangea", "mercury", "sonic"
};


public void Setup(string printerName)
{
if (!PrinterNames.Contains(printerName))
{
throw new ArgumentException("Unknown printer name", "printerName");
}
// ...
}
}

我现在搜索超过2小时,找到一个很好的方式 如何找到复制品在一个列表和 怎么移除它们。这是最简单的答案:

//Copy the string array with the filtered data of the analytics db into an list
// a list should be easier to use
List<string> list_filtered_data = new List<string>(analytics_db_filtered_data);


// Get distinct elements and convert into a list again.
List<string> distinct = list_filtered_data.Distinct().ToList();

输出将如下所示: 重复的元素将被移除在新的列表中称为独立!

注意: 这个问题是关于字符串数组的。所提到的例程不要与。包含单个字符串的方法。

我想补充一个关于不同 C # 版本的扩展答案,原因有二:

  • 接受的答案需要 Linq,它是完全惯用的 C # ,但它并非免费提供,而且在 C # 2.0或更低版本中不可用。当涉及到数组时,性能可能很重要,因此在某些情况下需要使用 Array 方法。

  • 没有一个答案直接涉及这个问题,它被要求把这个也放在一个函数中(因为一些答案也是混合字符串和字符串数组,这并不是完全不重要)。

Array. Exists ()是一个 C #/. NET 2.0方法,不需要 Linq。 在数组中搜索是 O (n)。为了更快地访问,可以使用 HashSet 或类似的集合。

由于.NET 3.5还存在一个泛型方法 Array<T>.Exists():

public void PrinterSetup(string[] printer)
{
if (Array.Exists(printer, x => x == "jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}

您可以编写一个自己的扩展方法(C # 3.0及以上版本)来添加语法糖,以获得相同/相似的结果”。不包含 Linq 的所有数组的字符串:

// Using the generic extension method below as requested.
public void PrinterSetup(string[] printer)
{
if (printer.ArrayContains("jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}


public static bool ArrayContains<T>(this T[] thisArray, T searchElement)
{
// If you want this to find "null" values, you could change the code here
return Array.Exists<T>(thisArray, x => x.Equals(searchElement));
}

在这种情况下,使用的是这个 ArrayContains()方法,而不是 Linq 的 Containsmethod。

别处提到的。包含引用 List<T>.Contains(从 C # 2.0开始)或 ArrayList.Contains(从 C # 1.1开始)的方法,但不直接引用数组本身。