Просто используйте Where
, Contains
в выражении Linq
, затем ToArray
Проще говоря,
Он фильтрует массив [ 117], проверяя, содержит ли массив one
каждый элемент из двух
Преобразует выходные данные обратно в массив
Присваивает его обратно к вашей переменной 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();
Создает разность множеств двух последовательностей.
blockquote>Фильтрует последовательность значений на основе предиката.
blockquote>Определяет, содержит ли последовательность указанный элемент.
blockquote>Метод Enumerable.ToArray (IEnumerable)
Создает массив из IEnumerable.
BLOCKQUOTE>
Возможно, повышение:: asio может быть полезным для Вас?
Я использовал потоки и код платформы. См. мой ответ на другой вопрос . Мне удалось поместить специфичные для ОС вещи в inputAvailable () (Linux использует select, Windows просто возвращает true). Затем я мог бы использовать WaitForSingleObject () с тайм-аутом в Windows, чтобы попытаться завершить поток, а затем TerminateThread (), чтобы убить его. Очень некрасиво, но команда не хотела использовать это усиление.
Я сделал что-то похожее на jwhitlock ... В итоге я получил класс StdinDataIO, который охватывает соответствующая реализация для ОС (*), чтобы остальная часть моей программы могла выбрать () для файлового дескриптора, предоставляемого StdinDataIO, оставаясь блаженно игнорирующим ограничения Windows в отношении stdin. Посмотрите здесь и здесь , если хотите,