Я написав код, який відповідає кожній букві з алфавіту з іншим символом (рядок довжиною 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, щоб ви могли переміщати елементи у невипадковому порядку.