/ / Ставить рубіновий хеш у випадковому порядку - ruby, масиви, хеш, zip

Поставляє рубіновий хеш у довільному порядку - рубій, масиви, хеш, ZIP

Я написав код, який відповідає кожній букві з алфавіту з іншим символом (рядок довжиною 1), і я перетворив їх у хеш:

Hash[String.alphabet.zip String.alphabet]
# String.alphabet returns an array with 0:A, 1:B, ... ,25:Z
# I take two times the alphabet to demonstrate

Але коли я друкую хеш із

puts "#{hash.keys.join}n#{hash.values.join}"

це дає мені

VKWLAXMBYNCZODPEQFRGSHTIUJ
VKWLAXMBYNCZODPEQFRGSHTIUJ

, який, хоча і є правильним, важко прочитати, якщо я хочу побачити, чи правильно відповідні букви, я б більше віддав перевагу виводу у вигляді

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ

[Метод друку працює правильно на інших хешах і, наскільки мені відомо, правильно]

Отже: Як я можу "застебнути" масиви, зберігаючи початковий порядок клавіш?

Відповіді:

3 для відповіді № 1

Відповіді про упорядковані хеші правильні, але у вашому випадку цього робити не обов'язково тримати хеш-порядок, ви можете просто сортувати його для вашого виводу.

puts hash.sort.transpose.map(&:join)

3 для відповіді № 2

Відсортовані хеші можна використовувати в Ruby 1.9.x. У Ruby 1.8.7 хеші без звуку

Від API:

А. Hash - це сукупність пар ключових значень. Він схожий на an Array, за винятком того, що індексація проводиться за допомогою довільних ключівбудь-якого типу об'єкта, а не цілого індексу. Порядок, в якому ви переходите хеш або за ключем, або за значенням, може здатися довільним, і, як правило, не буде в порядку вставки.


1 для відповіді № 3

Це не є zipце - це Hash у цьому проблема.

Хеш-таблиця звичайно (у загальному світі Росіїінформатика) не відслідковує порядок, до якого вставлені дані (або будь-який інший порядок сортування), про що він хоче знати, - це пошук. Якщо ви хочете перейти хеш-таблицю, щоб побачити все, що є в ній, ви переходите до елементів в порядку відро, де зберігаються елементи. Це, як правило, якийсь модуль хеш-функції. З гарною хеш-функцією, це по суті випадковий порядок.

У Ruby 1.8 саме так реалізовані хеш-таблиці.

Усвідомлюючи, що люди очікують своїх хешпам'ятайте порядок елементів, розробники Ruby додали якийсь пов'язаний список до своїх хеш-таблиць у Ruby 1.9, щоб ви могли переміщати елементи у невипадковому порядку.