我的 list<string>
有随机数量的条目(在 10-500 之间)。我需要找到出现次数最少的值。例如, list<string> myList
有 100 "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/