gpt4 book ai didi

c# - 比较/计算 System.Collections.ArrayList 中的值

转载 作者:太空狗 更新时间:2023-10-29 17:48:55 26 4
gpt4 key购买 nike

我正在清理 5 个文件以获得特定值。我预计不会有任何不同的值,但由于这是出于我自己的教育目的,我希望应用程序能够计算、比较和打印最受欢迎的值。

例如:

ArrayList arrName = new ArrayList();
arrName.Add("BOB")
arrName.Add("JOHN")
arrName.Add("TOM")
arrName.Add("TOM")
arrName.Add("TOM")

我希望的结果是TOM,但作为新手,我真的不知道如何前进。

非常感谢任何想法、建议或示例。谢谢。

最佳答案

如果可以的话,您可以使用 LINQ 轻松地执行此操作,查询类似于

names.Distinct().OrderByDescending(s => names.Count(u => u == s))).FirstOrDefault();

它将返回计数最高的值,或 default(Type)。在相同计数的情况下,它将返回计数最高的第一个。您可以将该方法放入带有泛型的扩展中以供一般使用。

class Program
{
static void Main(string[] args)
{

IEnumerable<String> names = new String[] { "BOB",
"JOHN",
"TOM",
"TOM",
"TOM" };
var res = names.Top(); //returns "TOM"
}
}

public static class Extensions
{

public static T Top<T>(this IEnumerable<T> values)
{
return values.Distinct().OrderByDescending(s => values.Count(u => u.Equals(s))).FirstOrDefault();
}
}

如果您需要所有具有最高计数的值,例如您的列表是 "BOB", "JOHN", "JOHN", "TOM", "TOM" 我想您可以使用这个版本改为返回 JOHN 和 TOM:

    public static IEnumerable<T> Top<T>(this IEnumerable<T> values)
{
List<T> ret = new List<T>();
int max = -1;

foreach (var val in values.Distinct())
{
int count = values.Count(t => t.Equals(val));

if (count >= max)
{
if (count > max)
{
ret.Clear();
max = count;
}
ret.Add(val); //stacks equivalent count, if applicable
}
}

return ret;
}

关于c# - 比较/计算 System.Collections.ArrayList 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126103/

26 4 0