繁体   English   中英

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

[英]C# - comparing values in 2 arrays

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

    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++;
    }

如何检查2个数组,看是否有匹配项?

谢谢。

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

更新:计算匹配次数,您可以使用;

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

您可以Array.IndexOf()使用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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM