Межплатформенный (linux/Win32), не блокирующий C++ IO на stdin/stdout/stderr

Просто используйте Where, Contains в выражении Linq, затем ToArray

Проще говоря,

  1. Он фильтрует массив [ 117], проверяя, содержит ли массив one каждый элемент из двух

  2. Преобразует выходные данные обратно в массив

  3. Присваивает его обратно к вашей переменной two

Пример

string[] one={"my", "5", "two", "array", "hey?", "good", "day"};
string[] two = { "hello!", "how", "good", "day", "us", "very", "two", "hard", "learn", "it" };

two = two.Where(x => !one.Contains(x)).ToArray();

Console.WriteLine(string.Join(",", two));

Примечание , Это с учетом регистра

Выходные данные

hello!,how,us,very,hard,learn,it

Или более эффективный способ - использовать Except, о котором я полностью забыл (благодаря комментариям) [ 1128]

two = two.Except(one).ToArray();

Enumerable.Except Method

Создает разность множеств двух последовательностей.

blockquote>

Enumerable.Where Method

Фильтрует последовательность значений на основе предиката.

blockquote>

Enumerable.Contains Method

Определяет, содержит ли последовательность указанный элемент.

blockquote>

Метод Enumerable.ToArray (IEnumerable)

Создает массив из IEnumerable.

BLOCKQUOTE>

8
задан Dan S. 24 November 2008 в 19:11
поделиться

3 ответа

Возможно, повышение:: asio может быть полезным для Вас?

6
ответ дан 5 December 2019 в 21:23
поделиться

Я использовал потоки и код платформы. См. мой ответ на другой вопрос . Мне удалось поместить специфичные для ОС вещи в inputAvailable () (Linux использует select, Windows просто возвращает true). Затем я мог бы использовать WaitForSingleObject () с тайм-аутом в Windows, чтобы попытаться завершить поток, а затем TerminateThread (), чтобы убить его. Очень некрасиво, но команда не хотела использовать это усиление.

1
ответ дан 5 December 2019 в 21:23
поделиться

Я сделал что-то похожее на jwhitlock ... В итоге я получил класс StdinDataIO, который охватывает соответствующая реализация для ОС (*), чтобы остальная часть моей программы могла выбрать () для файлового дескриптора, предоставляемого StdinDataIO, оставаясь блаженно игнорирующим ограничения Windows в отношении stdin. Посмотрите здесь и здесь , если хотите,

0
ответ дан 5 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: