Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 10.11.2015
Сообщений: 185

Функция с хеш-таблицей, сохранение порядка значений

07.05.2024, 23:05. Показов 1244. Ответов 20

Студворк — интернет-сервис помощи студентам
Доброго времени суток,
собственно коллеги прошу подсказать какой метод необходимо использовать в таком случае.
делаю функцию

столкнулся с проблемой , что

при использовании функции и передачи переменных
порядок ключей не сохраняется в том виде в котором он передаётся.
в результате видно что порядок control test002 отличается от control test003,
Я если честно уже голову сломал...(( Критика., любые варианты, хитрости, и т.д. готов все обсудить.
Заранее спасибо за помощь...

control test002: kava-banga Google_Seach_Maps new-test-WEB new-test-xxx
control test003: Google_Seach_Maps new-test-xxx new-test-WEB kava-banga

Задача такова...
1 . если -grind $true - то мы с данные с хештаблицы webfilter_urlfilter должны
а) пересоздать массив $namesInOrder= @($webfilter['names']['entries'].Keys)
(почему именно так. потому-что мне в будущем понадобится обращение к ключам массива. )
б) пересоздать с учетом новых индексов хештаблицу $webfilter_temp ...(порядок важен.!)

2. если -grind $false - то сработает 2 условия,
а) если переданные ключи [webfilter_urlfilter] - совпали с $namesInOrder # Если ключ существует, проверяем и добавляем новые значения, если они уникальны
б) если переданные ключи [webfilter_urlfilter] уникальны - то мы добавляем имена ключей в массив $namesInOrder и соответственно обновляем хеш-таблицу


PowerShell
1
2
3
4
5
6
7
8
9
10
11
# Пример использования функции с разными параметрами
webfilter_urlfilter -model "FGT 40C" -grind $true -webfilter @{
    names = @{
        entries = [ordered] @{
            "kava-banga" = @("new value5", "new value8")
            "Google_Seach_Maps" = @("new value8", "new value9")
            "new-test-WEB" = @("new value1", "new value2")
            "new-test-xxx" = @("new value1xx", "new value2yy")
        }
    }
}


PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function webfilter_urlfilter {
    param (
        $model = $null, # Model FGT
        [hashtable]$webfilter = $null,
        [bool]$grind
    )
    # эталонная хэш-таблица , с fqdn адресами 
    $namesInOrder = New-Object System.Collections.ArrayList
    $namesInOrder.AddRange(@("monitor-all", "ubuntu-all", "office365-all", "Google_Seach_Maps"))
 
    # Создаем хеш-таблицу с fqdn адресами, учитывая порядок из $namesInOrder
    $webfilter_temp = @{
        names = @{
            entries = @{
                $namesInOrder[0] = @(".*")
                $namesInOrder[1] = @("*.ubuntu.com", "*.linuxmint.com", "ubuntu.com")
                $namesInOrder[2] = @("packages.microsoft.com", "download.microsoft.com")
                $namesInOrder[3] = @("google.com")
            }
        }
    }
 
    # Проверяем, инициализирована ли переменная $webfilter
    if (-not $webfilter) {
        $webfilter = $webfilter_temp
    }
     # Проверяем, переключатель $grind
    if ($grind) {
        $namesInOrder= @($webfilter['names']['entries'].Keys)
    
        # Пересоздаем $webfilter_temp
        $webfilter_temp = @{
            names = @{
                entries = @{}
            }
        }
    
        # Перебираем все ключи из $webfilter и устанавливаем их в $webfilter_temp
        foreach ($key in $namesInOrder) {
 
            $webfilter_temp['names']['entries'][$key] = $webfilter['names']['entries'][$key]
        }
    }
        Write-Output "testindex_0: $($namesInOrder[0])  `n"
        Write-Output "testindex_1: $($namesInOrder[1])  `n"
        Write-Output "testindex_2: $($namesInOrder[2])  `n"
        Write-Output "testindex_3: $($namesInOrder[3])  `n"
        Write-Output "testindex_4: $($namesInOrder[4])  `n"
 
    
 
        Write-Output "control test002: $namesInOrder `n`n"
        Write-Output "control test003: $($webfilter_temp['names']['entries'].Keys) `n`n"
    }
результат тестового скрипта.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
testindex_0: kava-banga  
 
testindex_1: Google_Seach_Maps
 
testindex_2: new-test-WEB
 
testindex_3: new-test-xxx
 
testindex_4:
 
control test002: kava-banga Google_Seach_Maps new-test-WEB new-test-xxx
 
 
control test003: Google_Seach_Maps new-test-xxx new-test-WEB kava-banga
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2024, 23:05
Ответы с готовыми решениями:

Хеш-таблица и хеш-функция. Проверка на ввод существующих данных
Помогите доделать проверрку на ввод информации. В общем при вводе данных о новом сотруднике, таб номер не должен повторяться, т.к. он 1...

Хеш функция и хеш таблица. Проверка на наличие уже существующего таб номера
Есть рабочий код, всё работает и записывает в файл. Задача такова! Есть некий список сотрудников, фам, оклад ,таб номер, инд номер получаем...

Сортировка массива хеш-таблицей
Задача состоит в том что нужно отсортировать массив чисел(заданых рандомно) при помощи ХЕШ-таблицы. Прошу помощи так как в инете инфы 0!...

20
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
08.05.2024, 05:45
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[System.Collections.Specialized.OrderedDictionary] $o =new-object System.Collections.Specialized.OrderedDictionary
 
OverloadDefinitions
-------------------
void Insert(int index, System.Object key, System.Object value)
void IOrderedDictionary.Insert(int index, System.Object key, System.Object value  )
 
$o.Insert(0, 'x','X')
$o.Insert(1, 'y','Y')
$o.Insert(2 ,'z','Z')
 
$o['y']
$o[1]
 
$x = $o.GetEnumerator()
$x|foreach-object { write-output ( '{0} = {1} '-f $_.Key, $_.Value )}
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
08.05.2024, 11:04
Цитата Сообщение от magarjoba Посмотреть сообщение
порядок ключей не сохраняется в том виде в котором он передаётся.
в результате видно что порядок control test002 отличается от control test003,
Я если честно уже голову сломал...(( Критика., любые варианты, хитрости, и т.д. готов все обсудить.
Так ведь...
Цитата Сообщение от magarjoba Посмотреть сообщение
entries = @{
и
Цитата Сообщение от magarjoba Посмотреть сообщение
entries = [ordered] @{
- это два разных типа словарей... первый - неупорядоченный (Collections.Hashtable), второй - упорядоченный (Collections.Specialized.OrderedDictiona ry)
Если важен порядок ключей, то надо и создавать упорядоченный словарь.

Цитата Сообщение от magarjoba Посмотреть сообщение
б) пересоздать с учетом новых индексов хештаблицу $webfilter_temp ...(порядок важен.!)
Цитата Сообщение от magarjoba Посмотреть сообщение
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
...
    # Создаем хеш-таблицу с fqdn адресами, учитывая порядок из $namesInOrder
    $webfilter_temp = @{
        names = @{
            entries = [ordered]@{
                $namesInOrder[0] = @(".*")
                $namesInOrder[1] = @("*.ubuntu.com", "*.linuxmint.com", "ubuntu.com")
                $namesInOrder[2] = @("packages.microsoft.com", "download.microsoft.com")
                $namesInOrder[3] = @("google.com")
            }
        }
    }
...
- вот так.

и здесь тоже не забыть:
Цитата Сообщение от magarjoba Посмотреть сообщение
# Пересоздаем $webfilter_temp
        $webfilter_temp = @{
            names = @{
                entries = [ordered]@{}
            }
        }
2
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
08.05.2024, 13:13
magarjoba, Предпочитая одну структуру данных другой, ИМХО нужно иметь мотивы, и желательно веские.
Иметь хеш таблицу и обращаться к ее элементам по индексу мысль сомнительная

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class dataRow {
    [string]$Name 
    [string[]]$Values
}
 
$data = @(
    [dataRow]@{
        Name = "kava-banga"
        Values = "new value5", "new value8"
    },
    [dataRow]@{
        Name = "Google_Seach_Maps"
        Values = "new value8", "new value9"
    },
    [dataRow]@{
        Name = "new-test-WEB"
        Values = "new value1", "new value2"
    },
    [dataRow]@{
        Name = "new-test-xxx"
        Values = "new value1xx", "new value2yy"
    }
)
1
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
08.05.2024, 14:41
Цитата Сообщение от alhaos Посмотреть сообщение
Иметь хеш таблицу и обращаться к ее элементам по индексу мысль сомнительная
PowerShell
1
2
3
4
5
$d = [ordered]@{a=21;b=22;c=23}
for($i=0;$i-lt3;$i++){$d[$i]}
#21
#22
#23
а с неупорядоченными да, такой номер не пройдет.
0
 Аватар для volodin661
6673 / 2266 / 346
Регистрация: 10.12.2013
Сообщений: 7,832
08.05.2024, 15:20
magarjoba,

ты согласен пройти процедуру на полиграфе на предмет существования
'проблемы XY' в твоём вопросе ?


https://ru.wikipedia.org/wiki/... C%D0%B0_XY
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
08.05.2024, 16:46
YuS_2, я вообще в упорядоченной хеш таблице смысла особого не вижу
0
 Аватар для volodin661
6673 / 2266 / 346
Регистрация: 10.12.2013
Сообщений: 7,832
08.05.2024, 17:48
а кто может помешать двум благородным донам из неупорядочного хэша сделать
упорядоченный, путём добавления к ключам цифирок из натурального ряда в качестве префикса при создании
и последующей сортировкой по ключу при доступе ?

1A => 'aaaaaaaaaa'
2X => 'cccccccc'
3Я => 'zzzzzzzzzzzzz'
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
08.05.2024, 18:04
Цитата Сообщение от alhaos Посмотреть сообщение
в упорядоченной хеш таблице смысла особого не вижу
ну, как же... для порядку же

Цитата Сообщение от volodin661 Посмотреть сообщение
и последующей сортировкой по ключу при доступе ?
именно, это ведь лишние телодвижения... надо сломку стелить, штоп упасть... а тут всё готово, пуховая перина уже застелена... и ничего делать не надо.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
08.05.2024, 18:16
Цитата Сообщение от YuS_2 Посмотреть сообщение
ну, как же... для порядку же
я в реализации не разбирался, но я так думаю к структуре добавляется номер с ссылкой, чтобы получить n-ый элемент нужно перебрать n элементов, чем это от связного списка отличается не понимаю, плюс адресация по хеш... думаю это Microsoft way... исключительно.
0
 Аватар для volodin661
6673 / 2266 / 346
Регистрация: 10.12.2013
Сообщений: 7,832
08.05.2024, 18:47
а можно и так,
высокохудожественно:

PowerShell
1
2
3
4
5
6
7
8
9
set ЗАПРОС1_МОИ_ЧЕРВЯЧКИ   (@{ 1='Обыкновенный';2='Пестрый';3='Проворный';4='Зеленоватый';5='Красноватый' }) -Description 'червяки'
set ЗАПРОС2_МОИ_ПИЯВОЧКИ  (@{ 1='Зернистая'; 2='Конская'; 3='Тонкомордая';4='Цейлонская' }) -Description 'пиявки'
 
 
foreach ( $variable in dir variable:ЗАПРОС[0-9]* ) {
 
    $variable.value | format-list
 
}
0
2 / 2 / 0
Регистрация: 10.11.2015
Сообщений: 185
08.05.2024, 18:53  [ТС]
Цитата Сообщение от skouzmine Посмотреть сообщение
OverloadDefinitions
Цитата Сообщение от YuS_2 Посмотреть сообщение
Так ведь..
Цитата Сообщение от alhaos Посмотреть сообщение
Предпочитая одну структуру
Цитата Сообщение от volodin661 Посмотреть сообщение
ты согласен

коллеги , благодарю за щедрую помощь .
долго не отвечал, так как перетестировал все варианты с 0..

и обнаружил. что в принципе как и говорил человек
Цитата Сообщение от YuS_2 Посмотреть сообщение
entries = [ordered]@{
я добавил кроме входящих и внутри функции ordered.
на выходе когда я перепроверил, оказалось этого остаточно . что не нужно ухитряться...

// обьяснюсь во втором куске окончательного скрипта,
Порядок был важен, так как в полной функции . у меня идет перебор параметров и подстановка id индефикации --динамическая..id+10
и вот в этом случае, я как раз и старался добиться что-бы переменная с данными прилетела на обработку в правильном порядке.!

На данный момент Итоговая стартовая функция.. без доп функционала..

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
function webfilter_urlfilter {
    param (
        $model = $null, # Model FGT
        [hashtable]$webfilter = $null,
        [bool]$grind
    )
 
    # эталонная хэш-таблица , с fqdn адресами 
    $namesInOrder = New-Object System.Collections.ArrayList
    $namesInOrder.AddRange(@("monitor-all", "ubuntu-all", "office365-all", "Google_Seach_Maps"))
 
    # Создаем хеш-таблицу с fqdn адресами, учитывая порядок из $namesInOrder
    $webfilter_temp = @{
        names = @{
            entries = [ordered]@{
                $namesInOrder[0] = @(".*")
                $namesInOrder[1] = @("*.ubuntu.com", "*.linuxmint.com", "ubuntu.com")
                $namesInOrder[2] = @("packages.microsoft.com", "download.microsoft.com")
                $namesInOrder[3] = @("google.com")
            }
        }
    }
 
    # Проверяем, переключатель $grind
    if ($grind) {
        $namesInOrder = @($webfilter['names']['entries'].Keys)
    
        # Пересоздаем $webfilter_temp
        $webfilter_temp = $webfilter
    }
    else {
        # создаём временный массив $tmpInOrder для сравнения
        $tmpInOrder = @($webfilter['names']['entries'].Keys)
 
        # Ищем отсутствующие ключи и добавляем их к $namesInOrder
        $missingKeys = $tmpInOrder | Where-Object { $_ -notin $namesInOrder }
        $namesInOrder += $missingKeys
        
        foreach ($key in $webfilter['names']['entries'].Keys) {
            if (-not $webfilter_temp['names']['entries'][$key]) {
                # Если ключ отсутствует, добавляем новую запись
                $webfilter_temp['names']['entries'][$key] = $webfilter['names']['entries'][$key]
            }
            else {
                # Если ключ существует, обновляем значения
                $webfilter_temp['names']['entries'][$key] += $webfilter['names']['entries'][$key]
            }
        } 
    }
 
 
    Write-Output "`n ##/////### `n"
    Write-Output "testindex_0: $($namesInOrder[0])  `n"
    Write-Output "testindex_1: $($namesInOrder[1])  `n"
    Write-Output "testindex_2: $($namesInOrder[2])  `n"
    Write-Output "testindex_3: $($namesInOrder[3])  `n"
    Write-Output "testindex_4: $($namesInOrder[4])  `n"
    Write-Output "testindex_5: $($namesInOrder[5])  `n"
    Write-Output "testindex_6: $($namesInOrder[6])  `n"
    Write-Output "`n ##/////### `n"
 
 
    $webfilter_temp['names']['entries']
    Write-Output "`n ######### `n"
    $webfilter['names']['entries']
 
}
 
# Пример использования функции с разными параметрами
webfilter_urlfilter -model "FGT 40C" -grind $false -webfilter @{
    names = @{
        entries = [ordered] @{
            "kava-banga"        = @("new value5", "new value8")
            "Google_Seach_Maps" = @("new value8", "new value9")
            "new-test-WEB"      = @("new value1", "new value2")
            "new-test-xxx"      = @("new value13x", "new value2yy")
        }
    }
}
Результат
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
##/////###
 
testindex_0: monitor-all
 
testindex_1: ubuntu-all
 
testindex_2: office365-all
 
testindex_3: Google_Seach_Maps
 
testindex_4: kava-banga
 
testindex_5: new-test-WEB
 
testindex_6: new-test-xxx
 
 
 ##/////###
 
 
Name                           Value
----                           -----
monitor-all                    {.*}
ubuntu-all                     {*.ubuntu.com, *.linuxmint.com, ubuntu.com}
office365-all                  {packages.microsoft.com, download.microsoft.com}
Google_Seach_Maps              {google.com, new value8, new value9}
kava-banga                     {new value5, new value8}
new-test-WEB                   {new value1, new value2}
new-test-xxx                   {new value13x, new value2yy}
 
 #########
 
kava-banga                     {new value5, new value8}
Google_Seach_Maps              {new value8, new value9}
new-test-WEB                   {new value1, new value2}
new-test-xxx                   {new value13x, new value2yy}


Далее итоговый код который еще на стадии рихтовки, но рабочий.

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
function webfilter_urlfilter {
    param (
        $model = $null, # Model FGT
        [hashtable]$webfilter = $null,
        [bool]$grind
    )
    # Инициализация стандартных переменных для webfilter и их значений.
    $id_webfilter = 10
    $start_id_entries = 1
    $end_id_entries = 10002
    $type_url = $null
 
    # Создаем пустой массив для хранения конфигурационных блоков
    $webfilter_config = @()
 
    # эталонная хэш-таблица , с fqdn адресами 
    $namesInOrder = New-Object System.Collections.ArrayList
    $namesInOrder.AddRange(@("monitor-all", "ubuntu-all", "office365-all", "Google_Seach_Maps"))
 
    # Создаем хеш-таблицу с fqdn адресами, учитывая порядок из $namesInOrder
    $webfilter_temp = @{
        names = @{
            entries = [ordered]@{
                $namesInOrder[0] = @(".*")
                $namesInOrder[1] = @("*.ubuntu.com", "*.linuxmint.com", "ubuntu.com")
                $namesInOrder[2] = @("packages.microsoft.com", "download.microsoft.com")
                $namesInOrder[3] = @("google.com")
            }
        }
    }
 
    # Проверяем, переключатель $grind
    if ($grind) {
        $namesInOrder = @($webfilter['names']['entries'].Keys)
    
        # Пересоздаем $webfilter_temp
        $webfilter_temp = $webfilter
    }
    else {
        # создаём временный массив $tmpInOrder для сравнения
        $tmpInOrder = @($webfilter['names']['entries'].Keys)
 
        # Ищем отсутствующие ключи и добавляем их к $namesInOrder
        $missingKeys = $tmpInOrder | Where-Object { $_ -notin $namesInOrder }
        $namesInOrder += $missingKeys
        
        foreach ($key in $webfilter['names']['entries'].Keys) {
            if (-not $webfilter_temp['names']['entries'][$key]) {
                # Если ключ отсутствует, добавляем новую запись
                $webfilter_temp['names']['entries'][$key] = $webfilter['names']['entries'][$key]
            }
            else {
                # Если ключ существует, обновляем значения
                $webfilter_temp['names']['entries'][$key] += $webfilter['names']['entries'][$key]
            }
        } 
    }
 
    # Добавляем начальный блок config webfilter urlfilter
    $webfilter_config += @"
config webfilter urlfilter
"@
 
    # Забираем конечные  данные.
    foreach ($item in $webfilter_temp['names']['entries'].Keys) {
 
        $config_block = @"
    edit $($id_webfilter)
        set name "$item"
        config entries`n
"@
        # Для каждого URL в этом блоке создаем запись
        $entry_counter = $start_id_entries
        foreach ($url in $webfilter_temp['names']['entries'][$item]) {
            # Определяем тип URL (wildcard или simple)
            if ($url -match '^\*') {
                $type_url = 'wildcard'
            }
            else {
                $type_url = 'simple'
            }
 
            # Добавляем запись в конфигурацию
            $config_block += @"
            edit $entry_counter
                set url "$url"
                set type $type_url
                set action monitor
            next`n
"@
            $entry_counter++
        }
        # Если у имени есть только одна запись в виде ругулярки...
        if ($webfilter_temp['names']['entries'][$item].Count -eq 1 -and $webfilter_temp['names']['entries'][$item][0] -eq ".*") {
            $config_block += @"
        end
    next
"@
        }
        else {
            # Добавляем завершающую часть блока
            $config_block += @"
            edit $end_id_entries
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
"@
        }
 
        # Добавляем созданный конфигурационный блок в массив
        $webfilter_config += $config_block
 
        # Увеличиваем ID для следующего блока
        $id_webfilter += 10
    }
    $webfilter_config += @"
end
"@
 
    switch -regex ($model) {
        "^FGT.*40C$" {
            # Вывод текущих значений
            $test = $webfilter_config
        }
        default {
            Write-Output "#Passed without parameters - different model: $model`:n"
            return
        }
    }
    $webfilter_temp['names']['entries']
    Write-Output "`n ######### `n"
    $webfilter['names']['entries']
    Write-Output "`n #####2222#### `n"
    
    return $test
 
}
 
 
 
# Пример использования функции с разными параметрами
webfilter_urlfilter -model "FGT 40C" -grind $false -webfilter @{
    names = @{
        entries = [ordered] @{
            "kava-banga"        = @("new value5", "new value8")
            "Google_Seach_Maps" = @("new value8", "new value9")
            "new-test-WEB"      = @("new value1", "new value2")
            "new-test-xxx"      = @("new value13x", "new value2yy")
        }
    }
}


Я бы с рабостью, использовал-бы другой подход ,
но не опытен в написании функций
т.е.
на данном этапе
!1. если передать так webfilter_urlfilter -model "FGT 40C" -- то получим генерацию из стандартных значений хештаблицы внутри функции

2. если -grind $false --- то мы существующую хештаблицу просто обновляем (индексация сохраняется)

3. -grind $true -- то перетираем все к чертям и записываем те данные что передали..
-------------------
# Пример использования функции с разными параметрами
PowerShell
1
2
3
4
5
6
7
8
9
10
webfilter_urlfilter -model "FGT 40C" -grind $false -webfilter @{
    names = @{
        entries = [ordered] @{
            "kava-banga"        = @("new value5", "new value8")
            "Google_Seach_Maps" = @("new value8", "new value9")
            "new-test-WEB"      = @("new value1", "new value2")
            "new-test-xxx"      = @("new value13x", "new value2yy")
        }
    }
}
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
08.05.2024, 19:05
magarjoba, Уважаемый, я понимаю, что вы уже затратили много усилий на решение задачи и хочется ее довести до конца, но все таки может вернемся к ее постановке?
0
 Аватар для volodin661
6673 / 2266 / 346
Регистрация: 10.12.2013
Сообщений: 7,832
08.05.2024, 19:19
Цитата Сообщение от alhaos Посмотреть сообщение
но все таки может вернемся к ее постановке?
magarjoba, Уважаемый, куда ж несешься ты? дай ответ. Не дает ответа. Чудным звоном заливается колокольчик
0
2 / 2 / 0
Регистрация: 10.11.2015
Сообщений: 185
08.05.2024, 19:33  [ТС]
Цитата Сообщение от alhaos Посмотреть сообщение
может вернемся к ее постановке?
благодарю, но на данном этапе, реализация конечная работает как я выше написал.

1. Недобавлена проверка на дубликацию значений, если пользователь передал в функцию например
имя "test" = @("new value5", "new value8", "new value8", "new value5", "new value5") ...
Такую дубликацию нужно пересекать..!
---------------------
но все-же..
задумка была следущая

Сделать функцию , для автоподстановки/генерации кода
!.1. на основе стандартных данных внутри функции
!.2. в случае если (опытный) пользователь захочет видо-изменить внутренний стандарт и передаст параметры.

под параметрами имеется ввиду напр:
1 . имя вэбфильтра -- 2. значения для этого фэбфильтра


описывать синтаксис не буду, но в коде он правильный.
выглядит он так.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
config webfilter urlfilter
    edit 10
        set name "monitor-all"
        config entries
            edit 1
                set url ".*"
                set type simple
                set action monitor
            next
        end
    next
    edit 20
        set name "ubuntu-all"
        config entries
            edit 1
                set url "*.ubuntu.com"
                set type wildcard
                set action monitor
            next
            edit 2
                set url "*.linuxmint.com"
                set type wildcard
                set action monitor
            next
            edit 3
                set url "ubuntu.com"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
    edit 30
        set name "office365-all"
        config entries
            edit 1
                set url "packages.microsoft.com"
                set type simple
                set action monitor
            next
            edit 2
                set url "download.microsoft.com"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
    edit 40
        set name "Google_Seach_Maps"
        config entries
            edit 1
                set url "google.com"
                set type simple
                set action monitor
            next
            edit 2
                set url "new value8"
                set type simple
                set action monitor
            next
            edit 3
                set url "new value9"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
    edit 50
        set name "kava-banga"
        config entries
            edit 1
                set url "new value5"
                set type simple
                set action monitor
            next
            edit 2
                set url "new value8"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
    edit 60
        set name "new-test-WEB"
        config entries
            edit 1
                set url "new value1"
                set type simple
                set action monitor
            next
            edit 2
                set url "new value2"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
    edit 70
        set name "new-test-xxx"
        config entries
            edit 1
                set url "new value13x"
                set type simple
                set action monitor
            next
            edit 2
                set url "new value2yy"
                set type simple
                set action monitor
            next
            edit 10002
                set url "*"
                set type wildcard
                set action block
            next
        end
    next
end


Скажу заранее, Я не хотел бы выносить массив данных за предел функции поэтому старался внутри неё сделать стандартизацию.!
в данной функции есть такой нюанс.
Неудобность.
Допустим пользователь , захочет передать несколько имен для вэбфильтра новых и в каждом имени он будет перечислять 300+ записей!
в этом случае, функция будет выглядит нагромажденной.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
08.05.2024, 21:14
Цитата Сообщение от alhaos Посмотреть сообщение
я так думаю к структуре добавляется номер с ссылкой, чтобы получить n-ый элемент нужно перебрать n элементов
Номер - это и есть индекс. И доступ к элементу по индексу перебора не требует....
Цитата Сообщение от alhaos Посмотреть сообщение
чем это от связного списка отличается не понимаю
Не, как ты оцениваешь похожесть, не заглянув в реализацию структуры? Связный список - это ведь узлы и ссылки на последующий или(и) предыдущий узел, а это совсем не индексы... отличие коренное.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
09.05.2024, 13:38
YuS_2,
The SortedDictionary<TKey,TValue> generic class is a binary search tree with O(log n) retrieval, where n is the number of elements in the dictionary. In this respect, it is similar to the SortedList<TKey,TValue> generic class. The two classes have similar object models, and both have O(log n) retrieval. Where the two classes differ is in memory use and speed of insertion and removal:
отсюда

Выбор элемента в этом словаре имеет сложность O(log n), в массиве и в нормально реализованной хет таблице это O(1)
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
09.05.2024, 14:28
Цитата Сообщение от alhaos Посмотреть сообщение
Выбор элемента в этом словаре имеет сложность O(log n)
Какой ты хитрый, нашел оценку сложности и сравниваешь... только вот, это же... совсем не тот словарь.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
09.05.2024, 15:20
YuS_2, Точно не тот, посмотрел реализацию OrderedDictionary доступ действительно имеет сложность O(1) и по ключу и по индексу, жертвуется тем, что поддерживается два набора данных, один в ArrayList второй в HashTable плюс затраты на синхронизацию данных в этих структурах.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
09.05.2024, 16:02
alhaos, да, конечно, накладные расходы поболее будут, но здесь даже не в памяти и не во временной сложности дело, ибо предполагаемый набор данных небольшой, ТС-у нужен упорядоченный словарь, не с автосортировкой как SortedDictionary, а просто упорядоченный - как записали, так и получили, и индексы, хоть они и присутствуют, не особо нужны...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.05.2024, 16:02
Помогаю со студенческими работами здесь

программа работы с хеш-таблицей
Здравствуйте помогите мне написать программу с хеш-таблицей, как-то я логически ее не понимаю вот собственно задание для разрешения...

Работа с готовой хеш-таблицей
Есть хэш-таблица: t=68; for (int pht = 0; pht &lt; t; pht++) cout &lt;&lt; setw(2) &lt;&lt; pht &lt;&lt; setw(7) &lt;&lt; hashtable &lt;&lt; &quot; &quot;; Задание: ...

Хеш таблица с внешней таблицей переполнения
Добрый вечер. Как мне из этого сделать хеш таблицу с внешней таблицей переполнения? #include &lt;iostream&gt; #include...

Зачем в хеш мапе хеш функция?
Зачем в хеш мапе хешировать ключи? Можно же просто брать само значение(для чисел это будет само число, для строк будет сумма значений всех...

Хеш, хеш-функция, хеширование и HashMap
Снова приветствую, я начал свое знакомство с классом HashMap в Java и ввиду расхождений в разных источниках, которые запутали меня, возник...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru