论坛的朋友。
首先,我为我的英语道歉
如何浏览数组并创建一个列表来计算一个数字重复的次数,并按项目2从最高到最低排序。
我有以下数组:
int[] arrayNumeros= new int[10] {1,2,3,4,5,6,1,1,2,3}
我有以下列表:
List<Tuple<int, int>> contadorNumerosTotal = new List<Tuple<int, int>>();
这是我的代码:
for (int i = 0; i < arrayNumeros.Length; i++)
{
if (contadorNumerosTotal.Any(t => t.Item1 == arrayNumeros[i]))
{
//if the number exists I want item2 to be incremented by 1.
}else{
contadorNumerosTotal.Add(new Tuple<int, int>(arrayNumeros[i], 1));
}
}
for (int i = 0; i < contadorNumerosTotal.Count; i++)
{
System.Diagnostics.Debug.WriteLine(contadorNumerosTotal[i].Item1 +" -> "+ contadorNumerosTotal[i].Item2);
}
结果它应该显示:
1 -> 3
3 -> 3
2 -> 2
4 -> 1
5 -> 1
6 -> 1
非常感谢你的时间
答案 0 :(得分:0)
以下内容应产生预期效果:
int[] numbers = new int[] {1,2,3,4,5,6,1,1,2,3};
Dictionary<int, int> numberCount = new Dictionary<int, int>();
int len = numbers.Length;
for(int i = 0; i < len; i++)
{
if (numberCount.ContainsKey(numbers[i]))
{
numberCount[numbers[i]]++;
}
else
{
numberCount[numbers[i]] = 1;
}
}
// Sort by value if necessary. Otherwise loop through numberCount.
var sortednumberCount = numberCount.OrderByDescending(pair => pair.Value);
foreach (var number in sortednumberCount)
{
Console.WriteLine("{0} -> {1}", number.Key, number.Value);
}
输出:
1 -> 3
2 -> 2
3 -> 2
4 -> 1
5 -> 1
6 -> 1
答案 1 :(得分:0)
您可以使用以下内容:
List<Tuple<int, int>> contadorNumerosTotal =
arrayNumeros.GroupBy (i => i).Select (ints => new Tuple<int, int> (ints.Key, ints.Count ())).ToList ();
contadorNumerosTotal.Sort ((tuple, tuple1) => tuple1.Item2.CompareTo (tuple.Item2));
这将元素组arrayNumeros
除以数字的值并转换列表,以便它包含值(这是组的键)和值的计数(这是计数组)。最后,它会对从计数中降序的列表元素进行排序(您可以通过将tuple
的Item2与tuple1
的Item2进行比较而不是相反的方式对其进行排序。
你可以打印出这样的结果:
int [] arrayNumeros = new int[10] {1, 2, 3, 4, 5, 6, 1, 1, 2, 3};
List<Tuple<int, int>> contadorNumerosTotal =
arrayNumeros.GroupBy (i => i).Select (ints => new Tuple<int, int> (ints.Key, ints.Count ())).ToList ();
contadorNumerosTotal.Sort ((tuple, tuple1) => tuple1.Item2.CompareTo (tuple.Item2));
foreach (var count in contadorNumerosTotal)
Console.WriteLine ($"{count.Item1} -> {count.Item2}");
Console.ReadLine ();
结果如下:
1 -> 3
2 -> 2
3 -> 2
4 -> 1
5 -> 1
6 -> 1
详细了解groupBy
here。
答案 2 :(得分:0)
int[] arrayNumeros= new int[10] {1,2,3,4,5,6,1,1,2,3};
var result = arrayNumeros
.GroupBy( e => e )
.ToDictionary( e => e.Key, e => e.Count() )
.OrderByDescending( e => e.Value )
.ThenBy( e => e.Key )
.Select( e => Tuple.Create( e.Key, e.Value ) )
.ToList();