比较两个数组并显示字符数

Asd*_*dfg -2 c# algorithm pseudocode

我有两个数组:

 string[] array1 = {"a","b","c","d","e"}

 string[] array1 = {"x","y","a","b","a"}
Run Code Online (Sandbox Code Playgroud)

我想打印这样的结果:

a = 3
b = 2
c = 1
d = 1
e = 1
x = 1
y = 1
z = 1
Run Code Online (Sandbox Code Playgroud)

我可以在循环中运行循环并找到它,但是有更好的方法来实现相同的结果吗?

我想在不使用LINQ的情况下在普通C#中执行此操作.

Ree*_*sey 8

您可以使用LINQ来完成此任务:

var counts = array1.Concat(array2)
                  .GroupBy(v => v)
                  .Select(g => new { Value=g.Key, Number=g.Count() });

foreach(var item in counts.OrderBy(i => i.Value))
    Console.WriteLine("{0} = {1}", item.Value, item.Number);
Run Code Online (Sandbox Code Playgroud)

鉴于您出于某种原因想要避免使用LINQ和扩展方法,您可以构建自己的字典:

var counts = new Dictionary<string, int>();
foreach(string item in array1)
{
    if (counts.ContainsKey(item))
        counts[item]++;
    else
        counts[item] = 1;
}
foreach(string item in array2)
{
    if (counts.ContainsKey(item))
        counts[item]++;
    else
        counts[item] = 1;
}

// Print out counts
foreach(var kvp in counts)
    Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
Run Code Online (Sandbox Code Playgroud)

请注意,这不会对结果进行排序 - 如果您需要对它们进行排序,您也必须这样做.

  • @Asdfg没有指定 - 但是有理由避免使用LINQ吗? (4认同)

Tim*_*ter 5

你可以使用Concat,GroupByOrderByDescending:

var both = array1.Concat(array2);
var groups = both.GroupBy(s => s).OrderByDescending(g => g.Count());
Console.Write(
    String.Join(
        Environment.NewLine, 
            groups.Select(g => String.Format("{0} = {1}", g.Key, g.Count()))));
Run Code Online (Sandbox Code Playgroud)