【发布时间】:2019-12-01 20:28:27
【问题描述】:
给定一个列表中的 n 个值的列表。我编写了以下代码来遍历集合并将每个值与其他成员进行比较。
我觉得这有点“hacky”,但可能有更好的方法。
谁能给点建议?
Console.WriteLine("Enter a series of numbers seperated by a hyphen (-): ");
var userInput = Console.ReadLine().Split('-');
var inputList = new List<int>();
if (userInput.Count() > 1)
{
foreach (var item in userInput)
{
inputList.Add(int.Parse(item));
}
}
else
{
Console.WriteLine("Exiting....");
return;
}
var count = 0;
foreach (var num in inputList)
{
for (int i = 0; i < inputList.Count; i++)
{
if (num == inputList[i])
{
count++;
}
if (count != inputList.Count())
{
break;
}
}
}
【问题讨论】:
-
list.Count == list.Distinct().Count() -
var inputList = userInput.Select(int.Parse).ToList(); -
如果你想要一个重复值的列表:
var duplicates = list.GroupBy(n => n).Where(g => g.Skip(1).Any()).Select(g => g.Key).ToList(); -
您的代码实际上不会工作 - 您对
count != inputList.Count()的测试(ps 不要在同一代码中使用inputList.Count和inputList.Count())每次都会提前退出内部循环. -
不使用 LINQ,在
IEnumerable中测试重复的规范方法是将每个成员添加到HashSet并注意Add何时返回false表示重复添加尝试.