Чтобы сгенерировать {1,2,3,4,5,6}
в качестве результатов (т.е. удалить дубликаты смежных записей), рассмотрите следующий подход:
using System;
using System.Collections.Generic;
namespace Test
{
public class Program
{
public static IEnumerable<int> RemoveDuplicates(int[] input)
{
int? old = null;
foreach (var value in input)
{
if (value != old)
yield return value;
old = value;
}
}
public static void Main()
{
int[] getallen = new int[] { 1, 1, 2, 2, 3, 4, 4, 4, 5, 6 };
Console.WriteLine(string.Join(",", RemoveDuplicates(getallen)));
Console.ReadLine();
}
}
}
IEnumerable<int>
возвращает значения без использования массива, а yield return
используется для возвращать неповторяющиеся записи, по одной за раз.
value
сравнивается с old
, чтобы гарантировать, что дубликаты смежных записей игнорируются.
string.Join
используется для объединения значений вместе с ,
между ними, поэтому они хорошо печатаются на консоли.
С точки зрения производительности, изменение объявления old
на int old = (input?.FirstOrDefault() ?? 1) + 1;
также может помочь, так что обнуляемые типы не будут задействованы. Я предпочитаю оставить это как обнуляемый тип для ясности).
Нет. Вы не должны освобождать результат. Можно только назвать свободным (3) на указателях выделенный на "куче" с malloc (3), calloc (3) или перевыделение (3).
Статические данные являются частью данных программы или bss сегментов и сохранятся до выходов процесса (или перезаписывается должностным лицом (2)).
Используйте *_r
функции (getpwuid_r()
) для ориентированных на многопотоковое исполнение (повторно используемых) функций, которые позволяют Вам предоставлять пространство буфера для размещения возвращенной информации в. Убедитесь проверка errno для успешности или неуспешности. Если Вы не используете повторно используемые функции, можно безопасно предположить, что функция возвращает данные, которые не должны быть освобождены, но будут также перезаписаны последовательными вызовами к той же функции.
На самом деле это возвращает указатель на уже существующую структуру, таким образом, Вы не должны освобождать его.