Мне нравится C # linq, а также стиль методов расширения.
Вот простой код, чтобы узнать, как много раз каждого числа находится в массиве :
static void Main(string[] args)
{
int[] nums = { 1, 2, 2, 3, 3, 3 };
var groups = nums.GroupBy(n => n);
//var keynums = nums.Distinct();//ok
var keynums = Enumerable.Range(0, 10);//causes ArgumentNullException
var timesDict = keynums.ToDictionary(n => n,
n =>
groups.FirstOrDefault(g => g.Key == n)
//((groups.FirstOrDefault(g => g.Key == n))??what can be put here)
.Count());
foreach (var kv in timesDict)
{
Console.WriteLine($"{kv.Key}\t{string.Join(" ", kv.Value)}");
}
Console.ReadKey();
}
Код работает, но если я хочу знать,числа всегда [0-9] и хотят получить, сколько раз [0-9] появляется (если не появляется, счет должен быть 0 ).
Таким образом, код получит ArgumentNullException
, что имеет смысл, потому что FirstOrDefault
получает null
.
Итак, чтобы исправить это, я хочу использовать оператор ??
и датьэто значение по умолчанию.но я не могу придумать, как построить такую ценность.
Как бы вы ее решили?пожалуйста, не используйте другие стили, такие как if
, select new {}
.