我的 list<string> 有随机数量的条目(在 10-500 之间)。我需要找到出现次数最少的值。例如, list<string> myList100 "a", 50 "b", 2 "c", and 1 "d" ,我想提取“c”和“d”。我的问题是我永远不会知道每个字符串的确切数量,以及列表中字符串的确切名称。

对于类似的类比,请检查以下代码:

public class Program
{
    public static void Main(string[] args)
    {
        Random r = new Random();

        int randomNumber = r.Next(5,15);
        int randomRangeOne = r.Next(0,2);
        int randomRangeTwo = r.Next(0,2);

        List<int> randomList = new List<int>();

        for(int i = 0; i < 1000; i++)
        {
            int x = r.Next(randomNumber - randomRangeOne, randomNumber + randomRangeTwo);
            randomList.Add(x);
        }
    }
}

在这种情况下(在实际问题中,它是随机字符串,而不是随机整数),我将如何提取列表中出现次数最少的值?

最佳答案

这是一个简单的 LINQ

var leastOccured = data
    .GroupBy(x => x)
    .OrderBy(group => group.Count())
    .Select(x => x.Key)
    .First();

您将相同的字符串分组,按每组的编号升序对它们进行排序,然后取第一个出现次数最少的字符串。

如果可以有许多具有相同出现次数的字符串,您可以使用下面的代码
var ordered = data
    .GroupBy(x => x)
    .Select(group => new { group.Key, Count = group.Count() })
    .OrderBy(x => x.Count);

var minOccurrenceCount = ordered.First().Count;

var leastOccurredStrings = ordered
    .TakeWhile(x => x.Count == minOccurrenceCount)
    .Select(x => x.Key);

关于c# - 在 C# 中查找列表中出现次数最少的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40495820/

10-09 15:46