Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122

Фильтрация таблицы по нескольким объектам

24.03.2024, 15:47. Показов 1491. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть таблица, она не маленькая и заголовков много. Мне нужно выбрать два обьекта в ней(столбца). Найти пустые в первом и в этом случае забрать значения из второго через запятую. Значения нужны уникальные.
Вот что у меня получилось, однако возвращаются в последнюю переменную не уникальные значения.
PowerShell
1
2
3
4
5
6
7
  $tab = $table | select had1, had2 | Where-Object { $_.had1 -like '' } |  select had2 -Unique
  
  
    foreach($y in $tab){
        $unknown += $y.had2 + ';'
    }
   $unknown
Если посмотреть в $tab то значения уникальны, если посмотреть в $unknown то тут перечисляются все значения из $table, тоесть не уникальные. Почему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2024, 15:47
Ответы с готовыми решениями:

Фильтрация по нескольким столбцам таблицы
Подскажите пожалуйста как реализовать фильтрацию таблицы по нескольким (более 2) столбцам таблицы. Огромное спасибо

Фильтрация таблицы по нескольким столбцам
Добрый день. Подскажите пожалуйста, как можно решить такую задачку: отфильтровать таблицу сразу по нескольким столбцам (при этом...

Фильтрация из нескольких столбцов таблицы по нескольким условиям!
Всех приветствую! Имеется файл MS Access, в нем таблица с 10-ю столбцами. Обращение к таблице через ADOTable. Искомое значение вводим...

28
2806 / 504 / 121
Регистрация: 26.09.2020
Сообщений: 952
Записей в блоге: 5
26.03.2024, 22:49
Студворк — интернет-сервис помощи студентам
Если в коде volodin661, вместо
PowerShell
1
$table = [ArrayList]::new()
использовать
PowerShell
1
$table = [System.Collections.Generic.List[OO]]::new()
то добиться ленивого можно
PowerShell
1
2
3
4
5
$ToRemove = [System.Linq.Enumerable]::Where($table, [System.Func[object, bool]] {
    param($x) ($x.price -eq 0) -or
    ($x.color -eq 'deeppurple') -or
    ($x.color -eq 'green' -and $x.cnt -eq 0)
})
но удалить из перечисляемой коллекции нельзя
PowerShell
1
2
3
foreach ($item in $ToRemove) {
    $table.Remove($item)
}
надо приземлить перечисление в коллекцию, типа $RemoveCollection = $ToRemove.ToArray(), оторвав пупок связь от изначальной коллекции
что volodin661 и сделал, изначально используя [ArrayList]

Поправьте, если не прав.
1
 Аватар для volodin661
7093 / 2324 / 353
Регистрация: 10.12.2013
Сообщений: 8,019
26.03.2024, 23:06
skouzmine,


я не разработчик компилятора;

но когда выписывал претензию powershell, рассуждал так:

есть оператор foreach, он реализует enumerator,

и операндом у enumerator в моём примере является об'ект типа 'Список',

над которым программист собирается учинить насилие - вызвать метод его ( список ) изменяющий.

компилятор это отследил и выписал мне ошибку, какбэ предполагая, что я есть тот мудак, который не даёт ему покоя

и только всё портит.

Но если предположить, что я не мудак, а просто хочу добиться своей цели, не стирая в кровь пальцы,

то вполне реально нмв для компилятора сгенерировать код, который тихо соберёт об'екты списка удалит их, как только

enumerator прокрутится до конца.

Добавлено через 10 минут
iNNOKENTIY21,

это всё так,

но код мой совсем не эффективен; метод Remove, получив object для удаления, залезет в него и потом
начнёт бродить по списку, пытаясь его там найти ( по каким критериям - хрен знает; в доке ничего нет ) и удалить.


обычный Cишный код для связного списка сделает это гораздо быстрее и понятным для автора способом.
0
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 832
27.03.2024, 00:12
Цитата Сообщение от volodin661 Посмотреть сообщение
есть оператор foreach
спасибо попробуйте поставить пробело и вас ждет сурприз:

# NOTE: fragile syntax
# '@.split([System.Environment]::NewLine ).foreach { $table.Add([Row ...
# ~
# Unexpected token '{' in expression or statement.

так что похоже умельцы сделали секретное служебное слово
Code
1
foreach{
вообще на мой взгляд концентрация syntax sugar зашкаливает

можно по моему по дедовкис:
Code
1
2
3
4
5
6
7
8
9
10
$rawdata  =@'
много данных
'@
$table = [System.Collections.ArrayList]::new()
$chars = @([char]12,[char]10)
$rows = $rawdata.split($chars)
 
$rows |  foreach-object {
$row = $_
  $table.Add([Row]::new($row))
}

Добавлено через 3 минуты
Цитата Сообщение от volodin661 Посмотреть сообщение
вполне реально нмв для компилятора сгенерировать код, который

ConcurrentModificationException is a very common exception when working with collection classes.
гугль не умеет варть
0
2806 / 504 / 121
Регистрация: 26.09.2020
Сообщений: 952
Записей в блоге: 5
27.03.2024, 00:19
volodin661, в доках есть такое
If type T implements the IEquatable<T> generic interface, the equality comparer is the Equals method of that interface; otherwise, the default equality comparer is Object.Equals.
This method performs a linear search; therefore, this method is an O(n) operation, where n is Count.
А чего там за Object.Equals прячется, большой хз. Но мне уже не особо интересно, особенно глядя из powerahell.
0
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122
27.03.2024, 06:22  [ТС]
volodin661, А зачем удалять из таблицы данные? Когда я формулировал задачу я думал что решение будет выглядет не явным удалением каких то свойств, а просто группировкой таким образом, чтоб в результат был без этих свойств.
0
 Аватар для volodin661
7093 / 2324 / 353
Регистрация: 10.12.2013
Сообщений: 8,019
27.03.2024, 07:51
sergey020487, а как же тогда быть с этим:

Цитата Сообщение от sergey020487 Посмотреть сообщение
я хочу исключить из этой таблицы строки, в которых повторяются значения по 3м заголовкам: id name value. Не оставить уникальные, а именно исключить.
??

это была подготовка к 1-му числу месяца апреля ?
0
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122
27.03.2024, 08:01  [ТС]
volodin661, Да нет, не какого подвоха. Все правильно. Для меня по сути не важною удалятся они или отфильтруются, важен же результат. Мне просто интересно. По моему скромному опыту, в шеле стараются просто исключить данные фильтрами, а Вы подожли к этому вопросу именно удалением.
0
 Аватар для volodin661
7093 / 2324 / 353
Регистрация: 10.12.2013
Сообщений: 8,019
27.03.2024, 08:28
sergey020487,

я готов пойти вам ( нет, не так; Вам - вот так ) навстречу и для первого раза удалять из шелла не будем,
а просто выпишем выговор с предупреждением.

Добавлено через 12 минут
Есть такой язык, называется 'М',

в нём можно так:

Objective-C
1
2
set мойдядя('честных правил', '27/03/2024') = 'занемог'
set мойдядя('честных правил', '01/04/2024') = 'умер'
если переменная без преффикса ^ птичка, то это просто данные в памяти,
но если вот так:

Objective-C
1
2
set ^мойдядя('честных правил', '27/03/2024') = 'занемог'
set ^мойдядя('честных правил', '01/04/2024') = 'умер'
то это изменяются реальные данные в базе данных.
1
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
27.03.2024, 14:30
Цитата Сообщение от volodin661 Посмотреть сообщение
но всё ж сейчас модно в скриптах
если говорить о моде, сейчас уж слишком модно стало обращаться за помощью к различной гопоте (почти как в 90-е, за денежку малую все вопросы порешают... ), но это не наш метод (не мой точно, во всяком случае )

Цитата Сообщение от volodin661 Посмотреть сообщение
то вполне реально нмв для компилятора сгенерировать код, который тихо соберёт об'екты списка удалит их, как только
enumerator прокрутится до конца.
оно хоть и реально... но увы, проблемы индейцев шерифа не волнуют... так что, собственноручно и своими же инструментами, имеющимися в наличии. Пока так...

Цитата Сообщение от iNNOKENTIY21 Посмотреть сообщение
но удалить из перечисляемой коллекции нельзя
в этом и соль... буфер, последующий поиск и удаление... что выливается в накладные расходы...
Ну, а если присутствует ограничение во времени работы скриптов у ТС, то и поискать уже другие инструменты, помимо powershell.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.03.2024, 14:30

Обращения к нескольким объектам
Имеется такая ситуация: у меня на форме распологаются десятки кнопок (button1....battonn) к ним уже присвоены разнообразные функции ...

Присвоение свойств нескольким объектам
Нужна помощь, очень нужна. Передо мной стоит задача нескольким объектам присвоить одно и тоже свойство что то типо этого. With...

Смена одного свойства нескольким объектам
Многим известно, что можно одному объекту сменить несколько свойств не обычным, а таким способом: With объект .свойство1 ...

Привязка элемента к нескольким разным объектам
В окне MainWindow есть ListBox, привязанный к коллекции объектов. И есть контейнер Frame, в который загружается страница. Текстбоксы на...

Привязка к нескольким объектам используя BindingGroups
Попытался сделать свою версию примера по ссылке, когда BindingGroup работает с двумя data object (объектами источниками данных), но он ни в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru