C#-比较2个数组中的值

本文关键字:数组 比较 2个 C#- | 更新日期: 2023-09-27 18:29:39

我想做的事情相当简单。用户输入一个字符串。该程序检查并统计该文本字符串中存在的元音数量。

    char[] vowels = {'a', 'e', 'i', 'o', 'u'};
    int counter = 0;
    string s = txtInput.Text.Trim();
    char[] arr = s.ToCharArray();

    foreach (char i in arr)
    {
        //checks the 2 arrays for matches
        counter++;
    }

如何检查这两个数组以查看是否有匹配项?

谢谢。

C#-比较2个数组中的值

arr.Any(p => vowels.Contains(p));

更新:要计算匹配的数量,您可以使用;

 int count = arr.Where(p => vowels.Contains(p)).Count();

您可以使用Array.IndexOf()进行以下操作:

if (Array.IndexOf(vowels, i) >= 0)
{
    // the character is present
}

只需使用两个foreach循环

foreach(var i in arr)
    {
        foreach(var j in vowels)
        {
            if(i==j)
            {
                counter++;
            }
        }
    }

我会使用LINQ:

arr.Select(c => vowels.Contains(c));

为了获得字符数,可以使用Count方法而不是Select方法。如果你只想知道是否有元音,那么使用Any——一旦找到第一个匹配,它就会终止。

试试这个:

 if (vowels.Contains(i))
 {
    counter++;
 }

您可以做的是为元音创建一个字符列表,然后使用.contains方法。

您可以使用LINQ!

bool anyMatches = arr.Intersect(vowels).Any();

或者,如果你想要匹配:

var matches = arr.Intersect(vowels).ToList();

编辑:

或者计算匹配的确切数量:

int count = arr.Count(x => vowels.Contains(x));

使用此Linq查询

var q=from c in s 
  where vowels.Contains(c)
  group c by c into g
  select  new {vowel=g.Key, count=g.Count()};

然后您可以迭代并对内容执行您喜欢的操作

例如

 foreach (var x in q) {
     Console.WriteLine(String.Format("{0} : {1}",x.vowel,x;count));
 }
Hash<char> vowels = //initialize to vowels.
foreach(char c in input)
{
   if(hashset(vowels) contains the character)
      increment counter.
}
return counter.