length - 检查数组中是否有值(C#)



c# string split (7)

如何检查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")


Answer #1

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

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

    if( printer.Exists( p => p.Equals( "jupiter" ) ) )
    {
        ...
    }

Answer #2

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

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

只需添加string ,你就可以了。


Answer #3

我想补充一个新的答案,原因有两个:

  • 接受的答案要求Linq是完全惯用的C#,而它不是没有成本,并且在C#2.0或更低版本中不可用。 当涉及阵列时,性能可能很重要,因此在某些情况下您希望继续使用Array方法。

  • 没有答案直接关注的问题是,还要求将其放在一个函数中(因为一些答案也是将字符串与字符串数组混合在一起,这并不完全不重要)。

Array.Exists()是一个C#/。NET 2.0方法,不需要Linq。

从.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的情况下为所有数组获取.NET 2.0的“.Contains”:

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

public static bool Contains<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));
}

在这种情况下,使用此Contains()方法而不是Linq。

其他地方提到.Contains方法引用List<T>.Contains (自C#2.0)或ArrayList.Contains (自C#1.1以来),但不直接引用数组本身。

注意:问题是关于字符串数组。 提到的例程不能与单个字符串的.Contains方法混合使用。


Answer #4

我现在搜索了2h,找到了一个很好的方法, 如何在列表中找到重复项以及如何删除它们 。 这是最简单的答案:

//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();

输出将如下所示:将在名为distinct的新列表中删除重复元素!


Answer #5

考虑使用HashSet<T> Class来查找性能:

该方法是O(1)操作。

- HashSet<T>.Contains Method(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");
        }
        // ...
    }
}

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

}  

Answer #7
   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);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
----------------------------output-----------------------------------

1)真2)假3)真4)假





string