ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

НСкоторыС аспСкты Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Dictionary ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

На написаниС этой нСбольшой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ мСня ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΎ нСсколько ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² послСднСС врСмя собСсСдований Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² Π½Π°ΡˆΡƒ компанию. НСкоторыС соискатСли, ΠΊΠ°ΠΊ оказалось, нСдостаточно Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Π·Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Π°ΠΊΠΎΠΉ, Dictionary, ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Бтолкнулся Π΄Π°ΠΆΠ΅ с вСсьма Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ: ΠΌΠΎΠ», ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании сразу ΠΆΠ΅ помСщаСтся Π² ΠΊΡƒΡ‡Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (LOH), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄Π΅ нСльзя ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ запросы ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ коллСкциям с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² LINQ!

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, это Π½Π΅ совсСм Π²Π΅Ρ€Π½Ρ‹Π΅ утвСрТдСния. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ‡Π΅Π½ΡŒ часто Π±Ρ‹Π²Π°Π΅Ρ‚ вострСбован ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ построСнии высоконагруТСнного ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ устроСн ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, насколько Π·Π°Ρ‚Ρ€Π°Ρ‚Π΅Π½, сколько «слСдов» оставит Π² поколСниях ΠΈ LOH, вызывая излишнюю Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сборщик мусора; ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях вмСсто Π½Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² ΠΊΠ°ΠΊΠΈΡ… – ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈ Ρ‚.Π΄.

Π’ этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ постараСмся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ· этих вопросов.

РСализация словаря ΠΎΡ‚ ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ базируСтся, ΠΊΠ°ΠΊ всСм извСстно, Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях Π½Π΅Π΄ΠΎΡΡ‚ΠΈΠΆΠΈΠΌΡƒΡŽ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ΄Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(1) Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки, поиска, удалСния. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΆΠ΅ сцСнариях ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ использования этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ‡Ρ€Π΅Π²Π°Ρ‚ сущСствСнными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ памяти.

Π’Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… массивов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

Π­Ρ‚ΠΈ массивы хранят ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ слуТСбныС элСмСнты для быстрого доступа ΠΊ Π½ΠΈΠΌ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с запасом, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ практичСски всСгда Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Entry, Β«ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°ΡΒ» ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, прСдставляСт собой Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ для хранСния Ρ‚Π°ΠΊΠΎΠΉ сущности Π½Π΅ выдСляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто Π² ΠΊΡƒΡ‡Π΅, ΠΎΠ½Π° помСщаСтся ΠΏΠΎ мСсту объявлСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² области памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ массивом _entries. Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ConcurrentDictionary, Π³Π΄Π΅ аналогичная ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ прСдставлСна ссылочным Ρ‚ΠΈΠΏΠΎΠΌ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ (вСдь ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ссылочного Ρ‚ΠΈΠΏΠ° Π² 64 разрядной систСмС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 16 Π±Π°ΠΉΡ‚ Π½Π° слуТСбныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ 8 Π±Π°ΠΉΡ‚ нСпосрСдствСнно Π½Π° ссылку) ΠΈ Π½Π° сборщик мусора, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Π°Π½Π°Π»ΠΈΠ· мноТСства ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΈ ΠΏΠΎ сути слуТСбных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Ρ‚Π°ΠΊΠΎΠΉ массив _entries ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с Dictionary достаточно быстро достигнСт 85000 Π±Π°ΠΉΡ‚ ΠΈ пСрСмСстится Π² ΠΊΡƒΡ‡Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² LOH (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ссылочного Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ для 64 разрядного прилоТСния это случится ΠΏΡ€ΠΈ 3372 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΈ ΠΏΡ€ΠΈ 1932). Как извСстно, ΠΊΡƒΡ‡Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ ΠΊ росту потрСбляСмой ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Microsoft Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ _entries Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ массива, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… полям Entry? Π­Ρ‚ΠΎ Π±Ρ‹ ΠΎΡ‚Π΄Π°Π»ΠΈΠ»ΠΎ пСрспСктиву попадания Π² LOH ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях снизило ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти (ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ², скорСС всСго, частоту сборок мусора). Π’ΠΈΠ΄ΠΈΠΌΠΎ, посчитали, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Π»ΠΈΠΊ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со словарСм Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ бСсплатная структура Π΄Π°Π½Π½Ρ‹Ρ…. Для хранСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ потрСбляСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 12 Π±Π°ΠΉΡ‚ памяти (4 Π±Π°ΠΉΡ‚Π° Π² массивС _buckets ΠΈ ΠΏΠΎ 4 Π±Π°ΠΉΡ‚Π° Π½Π° поля hashCode ΠΈ next сущности Entry). Боздавая Π² памяти прилоТСния ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ заполняя Π΅Π³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 12ΠœΠ‘ пСрСрасхода памяти. Однако Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈ этим всС ограничится? НСт.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Dictionary всСгда Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство памяти для Π΅Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов. Π˜Π½Π°Ρ‡Π΅ Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ быстрой вставкС Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ€Π΅Ρ‡ΠΈ. На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ прСдставлСна Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ° выдСлСния памяти для словаря Ρ‚ΠΈΠΏΠ° Dictionary ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (красный Ρ†Π²Π΅Ρ‚). Для сравнСния ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, сколько Π±Π°ΠΉΡ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° – Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Π² словарС Π΄Π°Π½Π½Ρ‹Π΅ (синий Ρ†Π²Π΅Ρ‚). ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов ΠΎΡ‚ 500 тыс. Π΄ΠΎ 13 ΠΌΠ»Π½. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ инициализируСтся Π½Π° ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ 500 тыс.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Как Π²ΠΈΠ΄Π½ΠΎ, стратСгия рСзСрвирования памяти ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со словарСм достаточно Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Π°. Если свободноС мСсто Π² словарС Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ набСрСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ Смкости _buckets ΠΈ _entries ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния просто ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· старых массивов Π² Π½ΠΎΠ²Ρ‹Π΅, послС Ρ‡Π΅Π³ΠΎ ссылки Π½Π° старыС Β«ΠΎΡ‚ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡΒ», становятся доступными для сборщика мусора. Для словарСй с большим количСством Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти осущСствляСтся сразу Π² LOH, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΠΉ сборки мусора.
НапримСр, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ тСстов для создания прСдставлСнного Π²Ρ‹ΡˆΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ суммарно 746ΠœΠ‘ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΎ 3 сборки мусора Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ.

Π’ зависимости ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΡΠΊΠΎΠ½ΠΎΠΌΠ½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ:

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ роста?

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ с 20 Π΄ΠΎ 76 Π±Π°ΠΉΡ‚.

Из Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΎΠΏΡ‹Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹:

ΠœΡ‹ выяснили, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ…. А Ρ‡Ρ‚ΠΎ ΠΆΠ΅ с нСбольшими словарями? НСсколько Ρ€Π°Π· сталкивался с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π³Π΄Π΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π»ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… (Π½Π° 10-20-30 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) словарСй. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π»ΠΈ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΡ‹Ρ‚. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, сколько Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ поиск ΠΏΠΎ Dictionary (int count) Π² сравнСнии с поиском ΠΏΠΎ структурС:

Π—Π΄Π΅ΡΡŒ count – количСство ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… осущСствляСтся поиск.
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ прСдставлСны Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Как Π²ΠΈΠ΄Π½ΠΎ, врСмя поиска с ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ элСмСнтов массива Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ растСт ΠΎΡ‚ 18 наносСкунд ΠΏΡ€ΠΈ count=10 Π΄ΠΎ 134 нс ΠΏΡ€ΠΈ count=190 (ΠΏΡ€ΠΈ тСстировании создаСтся 50 тыс. Ρ‚Π°ΠΊΠΈΡ… поисковых массивов). Π—Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° поиск ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ сначала сущСствСнно ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ поиск ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ (Π² ΠΏΠΈΠΊΠ΅ – Π½Π° 29 нс), Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ количСствС элСмСнтов (Π² ΠΌΠΎΠ΅ΠΉ тСстовой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ 150) Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами, послС Ρ‡Π΅Π³ΠΎ рост Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° поиск ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ практичСски прСкращаСтся (ΠΏΠΎΠΌΠ½ΠΈΠΌ, поиск Π² словарС ΠΏΡ€ΠΈ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… условиях константный).

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния являСтся ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΡ€ΠΈ поискС ΠΏΠΎ массиву, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот поиск прСдсказуСмым для процСссора (Ρ‚ΠΎΡ‡Π½Π΅Π΅, для Π΅Π³ΠΎ кэша, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ поискС Π² Entry ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Ρ†ΠΈΠΊΠ»Ρƒ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ, поиск сразу замСдлится).
Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π·Π°Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, с использованиСм Π²Ρ‹Π·ΠΎΠ²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (callvirt для GetHashCode ΠΈ Equals). Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² – достаточно долгая опСрация. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Ссли трСбования ΠΊ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° высоки, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вопрос ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ словаря с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ (generic) ΠΊΠ»ΡŽΡ‡Π° Π½Π° ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. На Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ скорости поиска Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ словарС для нашСго тСстового случая.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Как Π²ΠΈΠ΄Π½ΠΎ, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° прилоТСния с использованиСм словарСй Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС памяти Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π― ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°: Ссли число элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ пятидСсяти ΠΈ ΠΊΠ»ΡŽΡ‡ нСуправляСмого Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊ скорости выполнСния ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вопрос ΠΎ возмоТности использования массивов вмСсто словарСй ΠΈ сортированных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство рСсурсов памяти ΠΈ процСссора.

Π’ΠΎ всСх прСдставлСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² тСстовой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, поэтому Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ высоки.
ВСстовыС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ Dictionary ΠΈ ConcurrentDictionary

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ΅Ρ…Π°Π»ΠΈ.

Если Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с самим Dictionary, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π».

Dictionary прСдставляСт собой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартной Hashtable.
Π—Π΄Π΅ΡΡŒ интСрСсны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ происходит Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ создании (Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ), Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² качСствС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ блиТайшСС простоС число (3). ΠŸΡ€ΠΈ этом ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ 2 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€” int[] buckets ΠΈ Entry[] entries. ΠŸΠ΅Ρ€Π²Π°Ρ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ индСксы элСмСнтов Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° ΠΎΠ½Π°, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, β€” сами элСмСнты Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта вычисляСтся Ρ…ΡΡˆΠΊΠΎΠ΄ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π·Π°Ρ‚Π΅ΠΌ β€” индСкс ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ:

Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary
Π—Π°Ρ‚Π΅ΠΌ провСряСтся Π½Π΅Ρ‚ Π»ΠΈ ΡƒΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ссли Π΅ΡΡ‚ΡŒ β€” Ρ‚ΠΎ опСрация Add выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° присваиваниС ΠΏΠΎ индСксу просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ элСмСнт Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ. Если достигнут ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря, Ρ‚ΠΎ происходит Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ (выбираСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ блиТайшим простым числом).
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Ρ†ΠΈΠΈ соотвСтствСнно β€” O(n).

Если происходит коллизия (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ с индСксов bucketNum ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ элСмСнт), Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт добавляСтся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π΅Π³ΠΎ индСкс сохраняСтся Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅, Π° индСкс старого элСмСнта β€” Π² Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ next.
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ связный список. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ называСтся chaining. Если ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта число ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π²Π΅Π»ΠΈΠΊΠΎ (большС 100 Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии), Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ происходит опСрация ΠΏΠ΅Ρ€Π΅Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выбираСтся Π½ΠΎΠ²Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ…ΡΡˆΠΊΠΎΠ΄ΠΎΠ².
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния O(1) ΠΈΠ»ΠΈ O(n) Π² случаС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов ΠΌΡ‹ Π·Π°Ρ‚ΠΈΡ€Π°Π΅ΠΌ Π΅Π³ΠΎ содСрТимоС значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, мСняСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ next Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов ΠΏΡ€ΠΈ нСоходимости ΠΈ сохраняСм индСкс этого элСмСнта Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΠΎΠ»Π΅ freeList, Π° староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π² ΠΏΠΎΠ»Π΅ next. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ свободныС ячСйки:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ снова O(1) ΠΈΠ»ΠΈ O(n) Π² случаС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π’Π°ΠΊ ΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ 2 ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:
1) ΠŸΡ€ΠΈ очисткС словаря, Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ измСняСтся. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Π²Ρ‹ просто Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ мСсто.
2) GetEnumerator просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ entires (ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(1)). Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляли элСмСнты β€” ΠΎΠ½ΠΈ вСрнутся Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС. Однако Ссли Π²Ρ‹ удаляли элСмСнты ΠΈ добавляли Π½ΠΎΠ²Ρ‹Π΅ β€” порядок соотвСтствСнно измСнится, поэтому Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π΅ стоит (Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ).

Π’Π°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ с ConcurrentDictionary?

Казалось Π±Ρ‹, Π΅ΡΡ‚ΡŒ 2 Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ± для обСспСчСния потокобСзопасности β€” ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС обращСния ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π½ΠΈΡ… ΠΆΠ΅. Однако, ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ β€” Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, добавляСмыС lock, Π΄Π° ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° 1 ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ³ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ быстродСйствия.

Π’ Microsoft пошли Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΈ Dictionary ΠΏΡ€ΠΈΡ‚Π΅Ρ€ΠΏΠ΅Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния. Π’Π°ΠΊ, благодаря Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структурС словаря ΠΈ Π΅Π³ΠΎ ΠΊΠΎΡ€Π·ΠΈΠ½, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° осущСствляСтся ΠΏΠΎ Π½ΠΈΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π΅ смог Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этой схСмой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив entries, поэтому ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ стали ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ single linked list: volatile Entry[] m_buckets (ΠΏΠΎΠ»Π΅ объявлСно ΠΊΠ°ΠΊ volitale, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ситуации ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ стали Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary

lockNo β€” это индСкс Π² Π½ΠΎΠ²ΠΎΠΌ массивС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации β€” object[] m_locks. Π•Π³ΠΎ использованиС позволяСт Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. Π Π°Π·ΠΌΠ΅Ρ€ этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ зависит ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ConcurrencyLevel ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· конструктор. Он опрСдСляСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это число_процСссоров * 4). Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ станут Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ всСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Resize, ToArray, Count, IsEmpty, Keys, Values, CopyTo, Clear). Π’Π°ΠΊΠΆΠ΅ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт сколько элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ приходится Π½Π° ΠΎΠ΄ΠΈΠ½ lock (ΠΊΠ°ΠΊ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ числа ΠΊΠΎΡ€Π·ΠΈΠ½ ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ) ΠΈ ΠΊΠΎΠ³Π΄Π° элСмСнтов становится большС, Ρ‡Π΅ΠΌ Π½Π°Π΄ΠΎ β€” коллСкция Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС поиск элСмСнта Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ O(1), Π° ΡƒΠΆΠ΅ O(n) Π·Π° счСт ΠΎΠ±Ρ…ΠΎΠ΄Π° связных списков. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ число ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря ΡƒΠΆΠ΅ Π½Π΅ 3, Π° 31.

ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΈ Π²ΠΈΠ΄:

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта приходится ΠΎΠ±ΠΎΠΉΡ‚ΠΈ вСсь связанный список просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ Ссли Π½Π΅Ρ‚ β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. Аналогично ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ β€” спСрва Π½Π°Π΄ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ·Π΅Π» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π½ΡƒΠΆΠ½Π° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ β€” это TryGetValue, GetEnumerator, ContainsKey ΠΈ индСксация. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΡ€Π·ΠΈΠ½ Π²ΠΈΠ΄Π½Ρ‹ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ volatile, Π»ΡŽΠ±Ρ‹Π΅ добавлСния ΠΈΠ»ΠΈ измСнСния элСмСнтов происходят ΠΏΡƒΡ‚Π΅ΠΌ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠΌ старого, Π° удалСния происходят просто Π·Π°ΠΌΠ΅Π½ΠΎΠΉ указатСля Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π».

Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ dictionary.Select(x => x.Value).ToArray(), Ρ‡Π΅ΠΌ dictionary.Values.ToArray()

И это Π½Π΅ совсСм Π²Π΅Ρ€Π½ΠΎ β€” вмСсто Β«Π»ΡƒΡ‡ΡˆΠ΅Β» Ρ‚ΡƒΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ «быстрСС» β€” Π·Π° счСт отсутствия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½ΠΎ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Π² Python 3 β€” основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ Python Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ встроСнных структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для хранСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ( dict ) β€” ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… структур, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ значСниям словаря Python ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» посвящСн ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ словаря.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря

ЗначСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Π»ΡŽΠ±Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ, Π½ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ обязаны Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ словари Python:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого словаря:

CΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, явно Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ dict() :

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π½ΠΈΠ·Ρƒ:

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ словари Π²Π½ΡƒΡ‚Ρ€ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ словаря. НапримСр:

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти содСрТимоС словаря, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ словаря Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. НапримСр:

Доступ ΠΊ элСмСнтами

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ элСмСнтам словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов

БущСствуСт мноТСство способов для добавлСния Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр:

Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ хранится. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅ΠΌΡƒ элСмСнты, ΠΎΠ΄ΠΈΠ½ Π·Π° ΠΎΠ΄Π½ΠΈΠΌ:

Для добавлСния элСмСнтов Π±Ρ‹Π»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния. НапримСр:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 0 являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π° «Apples» β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

МоТно Π΄Π°ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. НапримСр:

Помимо добавлСния Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Об этом Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ОбновлСниС элСмСнтов

ПослС добавлСния значСния Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт словаря ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Для измСнСния значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΡŽΡ‡. НапримСр:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· словаря ΠΌΠΎΠΆΠ½ΠΎ нСсколькими способами. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово del ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для удалСния элСмСнта с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. НапримСр:

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” функция pop() с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ записи Π² Π²ΠΈΠ΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. НапримСр:

Ѐункция popitem() удаляСт послСдний элСмСнт Π² словарС. Для Π½Π΅Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ? Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ слоТно ΠΈ Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ. ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово del для Ρ†Π΅Π»ΠΎΠ³ΠΎ словаря. НапримСр:

Код Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция print() пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π½Π΅ сущСствуСт.

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС элСмСнты словаря, оставив Π΅Π³ΠΎ пустым. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, воспользовавшись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ clear() :

Код Π²Π΅Ρ€Π½Π΅Ρ‚ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π΅Π³ΠΎ элСмСнты ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ распространСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ словарСй

ΠœΠ΅Ρ‚ΠΎΠ΄ len()

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство элСмСнтов Π² словарС. НапримСр:

Π’ этом словарС Ρ‚Ρ€ΠΈ записи, поэтому ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ 3.

ΠœΠ΅Ρ‚ΠΎΠ΄ copy()

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ копию ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ словаря. НапримСр:

Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ измСнСния Π² скопированном словарС Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

ΠœΠ΅Ρ‚ΠΎΠ΄ items()

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для словаря ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ Π² спискС. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ значСния словаря.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ вмСстС со словарСм, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π’Ρ‹Π²ΠΎΠ΄ дСмонстрируСт, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ мСняСтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² словарС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ элСмСнтов Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ.

ΠœΠ΅Ρ‚ΠΎΠ΄ fromkeys()

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ значСниями. Π£ Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с трСмя ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ ΠΊΠΎΠ΄Π΅ Π²Π²Π΅Ρ€Ρ…Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠœΠ΅Ρ‚ΠΎΠ΄ fromkeys() ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для создания Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ словаря.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° keys являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ происходит, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ values Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½:

ΠœΠ΅Ρ‚ΠΎΠ΄ setdefault()

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Если ΠΊΠ»ΡŽΡ‡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ вставлСн Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ вмСстС с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ссли Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Allion» Π½Π΅ повлияло Π½Π° ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ»ΡŽΡ‡Π° ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ keys()

Для использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ словаря, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Часто этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠ»ΡŽΡ‡ΠΈ Π² словарС:

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π­Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ словарях Python. Они хранят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠ°Ρ€Π°Ρ… Β«ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β». Β«ΠšΠ»ΡŽΡ‡Β» выступаСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» β€” это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Python ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для извлСчСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΈ рассмотрСны способы создания, измСнСния ΠΈ удалСния словаря, Π° Ρ‚Π°ΠΊΠΆΠ΅ самыС распространСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Π² Python (dict)

Π£ мСстная аналогия для словаря Π² языкС Python – ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ слову (ΠΊΠ»ΡŽΡ‡Ρƒ) соотвСтствуСт Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ устроСн

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Π² Python ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΠΎΠ»Π΅Π΅ извСстной ΠΊΠ°ΠΊ ассоциативный массив.

Бпособ хранСния словаря Python Π² памяти

Рассмотрим сначала Ρ‚ΠΎ, ΠΊΠ°ΠΊ выглядит структура ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятого элСмСнта словаря Π² pycore_dict.h :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΎΠ±Π»ΠΈΠΊΡƒ самой C-структуры словаря Π² Python:

Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ, ΠΏΡ€ΠΈ объявлСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ словаря, Π² памяти создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, состоящий ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ²:

Как ΠΈ Π² случаС со списками, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ словаря Ρ…Ρ€Π°Π½ΠΈΡ‚ лишь ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π° Π½Π΅ сами значСния

Базовая Ρ€Π°Π±ΠΎΡ‚Π° со словарями

ОбъявлСниС словаря

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Python 3 ΠΌΠΎΠΆΠ½ΠΎ нСсколькими способами. Но сначала рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈ создадим пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ объявим ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° экран Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта:

Помимо Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния, Π² Python сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ словари ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dict() :

inventory_dict = dict(right_hand=’sword’, left_hand=’shield’) inventory_dict >

Π§ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ…ΠΈΡ‚Ρ€Ρ‹Π΅ способы создания словарСй:

# ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ· дСсяти элСмСнтов со значСниями, Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 0 zero_array_dict = dict.fromkeys([‘a0’, ‘b0’, ‘c0’, ‘d0’], 0) zero_array_dict >

key_list = [‘marvel_hero’, ‘dc_hero’] value_list = [‘Spiderman’, ‘Flash’] superhero_dict = dict(zip(key_list, value_list)) superhero_dict >

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту словаря Π² Python

Π˜Π·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта словаря ΠΌΠΎΠΆΠ½ΠΎ СдинствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ – ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ:

hero_inventory = dict(strong_right_hand=’sword’, strong_left_hand=’shield +3′) what_in_right_hand = hero_inventory[‘strong_right_hand’] # ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ: what_in_right_hand = hero_inventory.get(‘strong_right_hand’) print(what_in_right_hand) > sword

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ списков, Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π² словарях Π½Π΅Ρ‚:

print(any_dict[1]) > Traceback (most recent call last): File «

«, line 1, in print(any_dict[1]) NameError: name ‘any_dict’ is not defined

💭 Подобная ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Π²Π΄Ρ€ΡƒΠ³ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ достаточно Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ этого словаря Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ выглядит Ρ‚Π°ΠΊ:

superhero_dict = <'dc_hero': 'Flash'>superhero_dict[‘dark_horse_hero’] = ‘Hellboy’ print(superhero_dict) >

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ произвСсти Π·Π°ΠΌΠ΅Π½Ρƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ:

superhero_dict[‘dc_hero’] = ‘Batwoman’ print(superhero_dict) >

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· словаря

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ запись Π² словарС Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ del :

# запись β€œ’dark_horse_hero’: ‘Hellboy’” исчСзнСт. ΠŸΡ€ΠΎΡΡ‚ΠΈ, ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ! del superhero_dict[‘dark_horse_hero’] print(superhero_dict) >

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π² словарС Python

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π² словарС слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ. Π—Π° это Π΄Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in :

if ‘marvel_hero’ in superhero_dict: print («Π”Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π΅ΡΡ‚ΡŒ») else: print(«Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² словарС отсутствуСт!») > Π”Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π΅ΡΡ‚ΡŒ # запись с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ‘dark_horse_hero’ Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π° Π½Π°ΠΌΠΈ Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ if ‘dark_horse_hero’ in superhero_dict: print («Π”Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π΅ΡΡ‚ΡŒ») else: print(«Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² словарС отсутствуСт!») > Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² словарС отсутствуСт!

💡 ΠšΡΡ‚Π°Ρ‚ΠΈ говоря, использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get() позволяСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ. Достаточно Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

my_hero = superhero_dict.get(‘dark_horse_hero’, ‘Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² словарС отсутствуСт!’) print(my_hero) > Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² словарС отсутствуСт!

Π”Π»ΠΈΠ½Π° словаря Π² Python

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ – это лишь Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ количСство записСй Π² Π½Ρ‘ΠΌ ΠΌΡ‹ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, воспользовавшись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ len() :

treasure = dict(t1=’gold’, t2=’necklace’) num_of_items = len(treasure) print(num_of_items) > 2

НС самая богатая Π΄ΠΎΠ±Ρ‹Ρ‡Π°! 🙄

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° словаря

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ состоит ΠΈΠ· ΠΏΠ°Ρ€, Ρ‚ΠΎ ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ значСниям.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ А Π²ΠΎΡ‚ – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² сортировки словаря ΠΏΠΎ значСниям:

👉 Π—Π΄Π΅ΡΡŒ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ, сама ΠΏΠΎ сСбС, запись sorted(elements.items(), key= lambda x: x[1]) Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π° отсортированный список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ словаря Π² Python

НС являСтся Π²Π΅Π»ΠΈΠΊΠΎΠΉ Ρ‚Π°ΠΉΠ½ΠΎΠΉ ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ, ΠΏΠΎ сути своСй, Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€ (Ρ‚.Π΅. ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ), ΠΌΠΎΠΆΠ½ΠΎ всячСски ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Один ΠΈΠ· способов – ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ:

ОбъСдинСниС словарСй

Когда Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Ρ‡ΡŒ ΠΎΠ± объСдинСнии Π΄Π²ΡƒΡ… словарСй, Ρ‚ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуСт ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для ΠΏΠ°Ρ€Ρ‹ сущностСй Ρ‚ΠΈΠΏΠ° «ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «+»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого становится довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ – стоит лишь Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π΅ являСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π½Π°Π΄ Ρ‚Π΅ΠΌ, какая ΠΈΠΌΠ΅Π½Π½ΠΎ опСрация Π½Π° мноТСствС словарСй Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° этим самым ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ «+». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

dict_1 = <'010120': 55000, '030420': 8500, '170420': 30000>dict_2 = <'050520': 2900, '160520': 16573>print(dict_1 + dict_2) Traceback (most recent call last): File «test.py», line 4, in print(dict_1 + dict_2) TypeError: unsupported operand type(s) for +: ‘dict’ and ‘dict’

💭 Если Π±Ρ‹ showcase_2 содСрТал ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² showcase_1, Ρ‚ΠΎ значСния, ассоциированныС с этими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ словарС Π±Ρ‹Π»ΠΈ Π±Ρ‹ взяты ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· showcase_2.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

Боздавая ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ограничСниях, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ…, Π² основном, Π½Π° Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ словарСй Π² Python

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ основныС словарныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с этим Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

# clear() farewell_dict = <'a': 'word', 'b': 3, 'c': 'x', 'd': 1, 'e': 12>farewell_dict.clear() print(farewell_dict) > <> # get() seasons = <'winter': 'cold', 'summer': 'hot', 'autumn': 'cold'>print(seasons.get(‘winter’, ‘Π’Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² словарС Π½Π΅Ρ‚’)) > cold seasons_2 = <'spring': 'warm'>print(seasons_2.get(‘nonexistent_key’, ‘Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ отсутствуСт’)) > Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ отсутствуСт seasons_3 = <'winter': 'surprice_warm'>print(seasons_3.get(‘nonexistent_key’)) > None # items() pairs_dict = <'41': 41, '42': 42, '43': 43>print(pairs_dict.items()) > dict_items([(’41’, 41), (’42’, 42), (’43’, 43)]) # keys() promo_dict = <'modelA': 100000, 'modelB': 300000, 'modelC': 120000>print(promo_dict.keys()) > dict_keys([‘modelA’, ‘ modelB’, ‘modelC’]) # values() palette = <'color1': 'red', 'color2': 'white', 'color3': 'purple'>print(palette.values()) > dict_values([‘red’, ‘white’, ‘purple’]) # pop() id_dict = <'Alex': 101546, 'Rachel': 116453, 'Johanna': 144172>print(id_dict.pop(‘Alex’)) > 101546 print(id_dict) > <'Rachel': 116453, 'Johanna': 144172># ΠšΠ»ΡŽΡ‡, само собой, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² словарС. # popitem() another_dict = <'t': 16, 'g': 53, 'y': 112, 'h': 23>print(another_dict.popitem()) > (‘h’, 23) print(another_dict) > <'t': 16, 'g': 53, 'y': 112># update() first_dictionary = <'p': 55, 'o': 44, 'i': 33>second_dictionary = <'l': 22, 'k': 11, 'p': 'changed'>first_dictionary.update(second_dictionary) print(first_dictionary) > <'p': 'changed', 'o': 44, 'j': 33, 'l': 22, 'k': 11># copy() some_dict = <'z': 1, 'x': 3, 'v': 12, 'n': 33>copy_dict = some_dict.copy() print(copy_dict) >

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Python-словарСй ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ

dict to json

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² json Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, спСрва Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам ΠΌΠΎΠ΄ΡƒΠ»ΡŒ json:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ. БущСствуСт Π΄Π²Π° схоТих ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

dict to list

medicine_chest = dict(top_part=’potion’, bot_part=’bandage’) medicine_list = [] for key, con in medicine_chest.items(): temp = ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° создадут словари dictionary medicine_list.append(temp) print(medicine_list) > [[‘top_part’, ‘potion’], [‘bot_part’, ‘ bandage’]]

dict to string

food_machine = dict(tier_1=’juice’, tier_2=’chocolate’) f_machine_str = str(food_machine) print(f_machine_str) >

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словарСй

Π’ Python сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ словари с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ†ΠΈΠΊΠ», ΠΎΡ‚Π±ΠΈΡ€Π°ΡŽΡ‚ key:value ΠΏΠ°Ρ€Ρ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½ΠΎΠ²Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π³Π΄Π΅ нСскольким элСмСнтам ряда Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл приводятся Π² соотвСтствиС ΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹:

Π’Π°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

list_of_keys = [‘q’, ‘w’, ‘e’, ‘r’, ‘t’] generated_dict = print(generated_dict) >

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ словари

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ упоминания заслуТиваСт Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ элСмСнт словаря ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС значСния Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

# Π³Π΄Π΅-Ρ‚ΠΎ улыбаСтся ΠΎΠ΄ΠΈΠ½ Xzibit nesting_d = <'fk': <'input_lvl_one': <'input_lvl_two': 42>>> print(nesting_d[‘fk’][‘input_lvl_one’][‘input_lvl_two’]) > 42

💭 Число ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности словарСй Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ!

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ словарям

OrderedDict

defaultdict

Counter

Counter – ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ словаря, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈ хранящий количСство ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… нСизмСняСмых элСмСнтов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Однако Counter() ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΈ своими нСбСзынтСрСсными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

НавСрно Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ словари ΠΈ списки (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, кстати, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² нашСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ » Бписки Π² Python «) схоТи ΠΊΠ°ΠΊ, внСшнС, Ρ‚Π°ΠΊ ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свой Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ нСобходимости.

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, ΠΈ списки ΠΈ словари – это измСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния для этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Π΅Ρ‰Ρ‘ ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ элСмСнты словарСй ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ, Π° Π½Π΅ ΠΏΠΎ позициям. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ входят Π² число Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΈ часто примСняСмых Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² языкС Python.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *