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#中执行此操作.
您可以使用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)
请注意,这不会对结果进行排序 - 如果您需要对它们进行排序,您也必须这样做.
你可以使用Concat,GroupBy和OrderByDescending:
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)
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |