1. JavaScript / Говнокод #25217

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    const arr = [['govno',  'shit'], ['kod', 'code']]
    //we expect it to be {'govno': 'shit', 'kod' :  'code'}
    
    //unsupported(yet)
    Object.fromEntries = arr => 
        Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));
    const res1 = Object.fromEntries(arr)
    
    const res2 = arr.reduce((res, [key, value]) => Object.defineProperty(res, key, {'value': value, 'enumerable': true}), {})
    
    const res3 = {}
    arr.forEach(([key, value]) => res3[key] = value)

    А как превратить массив пар ключ-значение в ассоциативный на Вашем языке?

    Запостил: bootcamp_dropout, 23 Декабря 2018

    Комментарии (112) RSS

    • const res = JSON.parse('{' + arr.map(xs=>xs.map(JSON.stringify).join(':')).join(',') + '}')
      Ответить
      • вот это ты питух. давай еще раз парс и стрингифай, чтобы наверняка.
        Ответить
        • Ага. А потом эти люди ждут, что кто-то сделает ещё более быструю версию V8, чтобы можно было сериализовывать и десериализовывать на каждый чих.
          Ответить
          • жопаскриптеры, сэр
            Ответить
          • Вот кстати, композицию (JSON.parse . JSON.stringify . JSON.parse) можно спокойно заменить на одно JSON.parse, это простое математическое тождество.
            Подобная питушня вида x == true ? true : false легко выкомпиливается.

            В случае той же сишки такую простую питушню человек перестаёт писать после достижения определённой стадии образованности, и оптимизатору нужно работать с менее тривиальным кодом, примеры для начинающих компилятор уже должен щёлкать как орешки.
            Ответить
            • > легко выкомпиливается
              Для этого нужно всего лишь формально доказать что читать далее.

              К слову, ни parse(stringify()) ни stringify(parse()) нельзя выбросить.
              Ответить
              • > К слову, ни parse(stringify()) ни stringify(parse()) нельзя выбросить.
                Точно. Именно поэтому я за композицию из трёх питушень.

                Кстати, x ? true : false в JS/python ведь тоже нельзя выбросить :)
                Ответить
                • >>Кстати, x ? true : false в JS/python ведь тоже нельзя выбросить :)
                  А как же
                  !!x
                  ?
                  Ответить
                  • Неужели нет каких-нибудь странных объектов, для которых это не эквивалентно?
                    Ответить
                    • Я бы сказал, что нет таких странных объектов. Все они остались в C++ (перегрузка операторов) и SQL (троичная логика).
                      Проверка на бульность не трогает внутренности объекта. Даже если его valueOf/toSring бросает исключение, ничего не будет.
                      Ответить
                      • >> SQL (троичная логика).
                        was?
                        Ответить
                        • is
                          Ответить
                          • Ты о nullable полях говоришь вероятно?

                            NULL, TRUE, FALSE?

                            Вообще старые субдшники за такое дело могут и в зуб дать. Не тебе конечно, а тому кто такую архитектуру придумал
                            Ответить
                            • Где-то в инструкции по "MySQL" был даже совет избегать нуляблей, потому что они снижают пирфоманс. Ну то есть хранить лучше NOT NULL, а действительность/недействительность значения выводить где-то на клиенте СУБД.
                              Ответить
                  • Да. Но я писал в том же смысле, что и Борманд.
                    Ответить
        • Скучно. Лучше так:
          const res = eval('({' + String(arr.map(xs=>xs.map(JSON.stringify).join(':'))) + '})')


          Ещё можно переписать рекурсивно, с конкатенацией и join через свёртку, которую тоже рекурсивно написать. Может, потом ещё через транслятор в JSFUCK прогнать.
          Ответить
          • eval считается опасной функцией. Именно поэтому я за "JSON.parse".

            А вообще можно сделать JSONP:
            eval('Peetooh({' + String(arr.map(xs=>xs.map(JSON.stringify).join(':'))) + '})');

            Где функция Peetooh, записывающая значение своего аргумента в какую-нибудь переменную, должна быть заранее определена.
            Ответить
            • А JSONP не считается опасным?
              Ответить
              • Если провести синтаксический анализ и доказать, что код не вызывает ничего, кроме пользовательской функции (в нашем случае Peetooh), то не считается. Для этого нужно всего лишь формально доказать что читать далее.

                А доказывать мы, конечно же, ничего не будем, потому что мы тут все программисты, а не математики.
                Ответить
                • Но ведь браузер не доказывает...
                  Ответить
                  • Наш сервер возвращает только проверенный JSONP, поэтому Вы можете нам доверять. А ещё мы используем SSL, поэтому всё надёжно. Видите зелёный замочек в браузере?
                    Ответить
            • > eval считается опасной функцией
              На самом деле, я слошарил и ничего интересного в eval не передал. Там фактически будет сджойненная строка с жсонами пар. Надо так:
              eval('({' + String(arr.map(([k,v])=>'"'+k+'":"'+v+'"')) + '})')
              Ответить
              • Но зачем нам вообще обрабатывать массив в параметрах eval если есть регулярки?
                eval(''.concat('({',String(arr).replace(/(\w+)(\,)(\w+)/gm, '"$1":"$3"'), '})'))
                Ответить
    • коко
      val pairs = arrayOf(Pair("name", "joe"), Pair("last_name", "pupkin"))
      val map = pairs.map {it.first to it.second}.toMap()    
      print(map["name"]) // joe


      Пипи
      pairs = [("name", "ivan"), ("last_name", "pupkin")]
      map = dict(pairs)
      print(map["name"]) # Ivan


      ruru
      paris = [[:name, "John"], [:last_name, "Sidorov"]]
      map = paris.to_h 
      p map[:name] # John
      "John"


      Кто соснул?
      JS сосунул!
      Кто соснул?
      JS сосунул!
      Кто соснул?
      JS сосунул!

      >>JSON
      буэ
      Ответить
      • PHP 5.5+:
        <?php $pairs = [['govno',  'shit'], ['kod', 'code']];
        
        $map = array_combine(array_column($pairs, 0), array_column($pairs, 1));
        
        var_dump($map);

        Именно поэтому.
        Ответить
        • Пепе

          $array_ref = [['govno',  'shit'], ['kod', 'code']];
          %hash = map {@$_} @$array_ref;
          print $hash{kod};
          Ответить
          • PHP < 5.5:
            <?php $pairs = array(array('govno',  'shit'), array('kod', 'code'));
            
            array_walk($pairs, function($value, $key) use(&$map){$map[$value[0]] = $value[1];});
            
            var_dump($map);
            Ответить
            • Ну или как в предыдущем коде, только доопределить функцию array_column:
              function array_column($array, $column) {
                  return array_map(function($data) use($column) {return $data[$column];}, $array);
              }
              Ответить
              • В жопу ваше функциоальное
                local paris = {{"name", "jesus"}, {"last_name", "christos"}}
                local map = {}
                for _, rec in ipairs(paris) do
                  map[rec[1]] = rec[2]
                end
                
                print(map["name"])


                Торт, помогай!!
                Ответить
                • ахаха
                  вот это смешно, почти няшно луашно, с метатататататтабла
                  local function add_new(tab, _, rec)  
                    rawset(tab, rec[1], rec[2])
                  end
                  
                  local recordz = {}
                  setmetatable(recordz, {__newindex = add_new})
                  
                  recordz[#recordz] =  {"name", "Smirre"} --добавь еще
                  
                  print(recordz["name"]) -- Smirre
                  Ответить
                  • Вот это действительно по-луашному!
                    Ответить
                  • Перевёл на "PHP", проверь:
                    <?php class NyaArray extends ArrayIterator {
                       public function offsetSet($offset, $value) {
                            if (is_null($offset)) {
                                $offset = $value[0];
                                $value = $value[1];
                            }
                            parent::offsetSet($offset, $value);
                        }
                    }
                    
                    $recordz = new NyaArray();
                    
                    $recordz[] = ['govno',  'shit'];
                    $recordz[] = ['kod', 'code'];
                    
                    var_dump((array)$recordz);
                    Ответить
                  • Перевёл на "PHP", проверь:
                    <?php class NyaArray extends ArrayIterator {
                       public function offsetSet($offset, $value) {
                            if (is_null($offset)) {
                                $offset = $value[0];
                                $value = $value[1];
                            }
                            parent::offsetSet($offset, $value);
                        }
                    }
                    
                    $recordz = new NyaArray();
                    
                    $recordz[] = ['govno',  'shit'];
                    $recordz[] = ['kod', 'code'];
                    
                    var_dump((array)$recordz);
                    Ответить
                    • ой блядь, я сейчас раззадорюсь и тоже начну хуячить классы с переопределенным оператором на C#, на Kotlin, на C++...
                      Ответить
                      • Давай!

                        Можно ещё переопределить конструктор, чтобы можно было писа́ть что-то типа:
                        $recordz = new NyaArray('govno', 'shit', 'kod', 'code');

                        Или вообще сделать закос под перловский qw...
                        Ответить
                        • В смысле вараргом?)

                          У меня нет седьмого сисярпа, так что туплов мне не завезли пока, буду по старинке
                          var pairs = new string[][] {new string[] {"name", "me"}, new string[] {"age", "99"}};
                                      var map = pairs.ToDictionary(r => r[0], r => r[1]);
                                      Console.Write(map["name"]);


                          Замечу кстати, что LINQ с лмбдм появился в C# когда в Java еще даже о стримах и не слыхивали. А вывода типов там и чичас нет.

                          С перегрузкой попоратора фигачить лянтно ибо:
                          1) надо или сахар для делегирования
                          2) или наследовать коллекцию

                          Сделаю как на кокотлине, там сухер есть
                          Ответить
                          • class LolList(vararg pairs: Pair<String, String>) : MutableMap<String, String> by mutableMapOf() {
                                constructor(vararg values: String) : this(*values.toList().zipWithNext().toTypedArray())
                            //не оптимальненько
                            
                                init {
                                    pairs.forEach(::plus)
                                }
                            
                                operator fun plus(value: Array<Pair<String, String>>) {
                                    this += value.toList()
                                }
                            
                                operator fun plus(value: Iterable<Pair<String, String>>) {
                                    value.forEach(::plus)
                                }
                            
                                operator fun plus(value: Pair<String, String>) {
                                    this[value.first] = value.second
                                }
                            
                            
                            }
                            
                            
                            fun main(args: Array<String>) {
                                val lolList = LolList("Soset", "JS", "Nesoset", "koko")
                                lolList += arrayOf(Pair("Name", "Suslik"), Pair("LastName", "Soslik"))
                                lolList += Pair("Age", "03")
                                println(lolList["Name"])
                                println(lolList["Age"])
                                println(lolList["Soset"])
                            }


                            Выглядит как лист, хрюкает как лист, а все равно мапа

                            Как видите, в коко тоже можно выебываца как в плюсплюс и пепе и даже навернуть говна тоже можно, потому что это конечно не настоящий List, а реализовывать List (даже пусть и не мутабл) мне ленива потому что адаптеров нет
                            Ответить
          • Не совсем понятно зачем тут ононимный моссив с референсом, когда можно массив обычный.
            Алсо, не забываем my, чтобы не прослыть неряхами
            #!/usr/bin/perl -w
            use strict;
            
            my @pairs = (["name", "govnko"], ["last_name", "mitich"]);
            my %map = map{@$_} @pairs;
            print $map{'name'};


            Забавно кстати что превращение массива из двух элементов в хеш раскладывает их в ключ и значнеие (map{@$_}).

            Тоже самое случается и в Ruby (to_h) и в Pythin (dict([..])), причем там массив пар поддерживается аутофбокс (а в перле надо кастить каждую пару)

            Волшебства из приведенных выше япов нету только в пыхе и котлине, ну и само собой в жопаскрипте
            Что какбы намекает
            Ответить
            • Да, в Пепе хэш вообще представляется идентично плоскому списку ключей вперемежку со значениями. Кот в блоке мап разыменовывает ссылки на моссивы-пары, и возвращаемые списки-пары кокотенируются. Результат равносилен %map = qw/name govnko last_name mitich/.
              Ответить
              • Я сигда юзал такой литерал
                my %h = ("name" => "pupkin", "age" => 94);
                 print $h{'name'};


                но ты прав: можа и так
                my %h = ("name" , "pupkin", "age" , 94);
                # ну или
                my %h = qw(name pupkin age 94);



                какой все таки могучий ЯП
                школоте не понять
                Ответить
                • К тому же "жирная запятая" (=>) позволяла указывать ключи без кавычек. ;) Кстати, из хэше-списочного дуализма вытекало:
                  my %atoi = (one => 1, two => 2);
                  my %itoa = reverse %atoi;
                  print $itoa{1};

                  Однако для меня радость от фич, позволявших "выражаться" богаче, со временем сменилась отторжением, поскольку конца и края нюансам видно не было. Не знаю, сколько знаний требуется, чтобы не сомневаться в своей интерпретации очередного куска кода. Спецификация Perl5 (если б существовала) потягалась бы с каким-нибудь C++25, я думаю.
                  Ответить
                  • >>reverse для хеш
                    страшно подумать что случится с (one => 1, ein => 1, two => 2, zwei => 2)
                    ;)))

                    Мне нравится руби: это мощность перла плюс ООПшный синтаксис (где надо) и меньшее кол-во операторов

                    Жаль, что руби уже всё
                    Ответить
                    • > страшно подумать что случится
                      wow such random so timtowtdi
                      my %kubik = (1=>1, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1);
                      my %kibuk = reverse %kubik;
                      print values %kibuk;
                      Ответить
                      • my %h = map{$_ => 1} (1..5);
                        my @a = keys %h;
                        print $a[0]; # рэндом здорового перловика
                        Ответить
                        • Отличный тамада рэндом и свойства интересные. Для кубика я наблюдал, что при "бросках" в цикле j-ая грань выпадала с частотой m_j / ∑m_j при целых m_j ≥ 0 и ∑m_j = 16. Для твоего ∑ = 8.
                          Ответить
                    • >> Жаль, что руби уже всё

                      Как всё?

                      Ruby 2.6.0-rc2 Released

                      We are pleased to announce the release of Ruby 2.6.0-rc2.

                      Continue Reading...

                      Posted by naruse on 15 Dec 2018

                      На завтра запланирован официальный выпуск Ruby 2.6 (уже не RC). Мацумото — ёбаный сектант, поэтому запланировал выпуск на католическое Рождество.

                      А на 2038-й год запланировали Ruby 3.0:
                      https://bugs.ruby-lang.org/versions/5
                      Ответить
                      • А 22 декабря 2017 года вышел новый TCL.

                        Ну ты же понимаешь, о чем я?:)
                        Ответить
                        • К сожалению, не обладаю женской интуицией.
                          Ответить
              • Какой map?! О чем вы?!
                my %map = qw(Name Joe LastName Cocker);
                print $map{'Name'};
                
                # Or 
                
                my %map = (("Name", "Ivan"), ("NickName", "The Terrible"));
                print $map{'NickName'};


                Списки смердживаются, при присвоении к хешу превращаются в ключ-значение

                >There really isn't any such thing as a hash literal in Perl, but if you assign an ordinary list to a hash, each pair of values in the list will be taken to indicate one key/value association
                Ответить
                • Список для присваивания хэшу ведь надо было получить из массива пар. А оба твоих списка одинаково плоские (второй структурирован разве что визуально, и к AoA отношения не имеет).
                  Ответить
                  • именно массив?
                    А списковые лиреталы не подходят?

                    ах...
                    Ответить
                    • >ах
                      куд кудах.

                      Задача была преобразовать массивы пар.

                      То, что ты тут изобразил это конструкция языка "лист скаляров" которая может заполнять массивы (@) и хеши (%).

                      Причем для перла сама задача смысле не имеет потому что в массиве в перле могут лежать только скаляры!

                      Но в него можно покласть референс на массив.

                      Вот тут в массиве лежат референсы на анониманые массивы
                      $array_ref = [['govno', 'shit'], ['kod', 'code']];

                      В мапе $_ это реф на аннимный массив, а @ его дереференсит как массив

                      пушто

                      [] это синтаксис создания анонимного массива и вертания на него ссылки
                      {} -- синтаксис созидания ононимного хеша и вертания на него ссылки

                      а () что ("foo", 32) что ("foo" => 42) (стрелка -- синоним запятой) это литерал для создания массива (если lvalue с собачкой) или хеша (если оно с процентом) или вообще вертания последнего элемемента если там скаляр (ну или заполнение нескольких скаляров если их там тоже лист)



                      Знакотки пилять
                      Ответить
      • > paris

        Nous restons cinq jours à Paris.
        Ответить
        • ты чотли не заеншь что лдюи птувют бкувы?
          Ответить
          • Кмер чо за деталь перди кит говно ввода. Змея ему пуховиком.
            Ответить
    • Map.fromList¹
      
      ¹ https://hackage.haskell.org/package/containers-0.4.0.0/docs/Data-Map.html#g:15
      Ответить
    • Перевёл на «C++»:
      #include <iostream>
       
      #include <vector>
      #include <map>
      #include <string>
       
       
      int main()
      {
          using namespace std;
      
          vector<pair<string, string>> pairs = { {"govno",  "shit"}, {"kod", "code"} };
          map<string, string> res { pairs.begin(), pairs.end() };
       
          for (auto && mapPair : res) {
              cout << mapPair.first << ": " << mapPair.second << endl;
          }
       
          return EXIT_SUCCESS;
      }

      https://ideone.com/INzFOb
      Ответить
      • Обратите внимание на строки 11 и 12: в «JavaScript» можно не писать «;», а в «C++» — даже «=»! Именно поэтому я за «C++».
        Ответить
        • В «C++» 100500 способов инициализировать переменную:
          https://blog.tartanllama.xyz/initialization-is-bonkers/

          There is more than one way to screw it up.

          Именно поэтому я за «C++».
          Ответить
          • И я. Лишь бы только не добавляли мерзкого способа с designated initializers как в C99, а то запутаемся.
            Pos p = { .row = 1, .col = 3 };  // FUUU
            Ответить
            • уже (C++20)
              https://en.cppreference.com/w/cpp/language/aggregate_initialization

              Правда, там куча ограничений. Насколько я понял, это, например, не сработает:
              MyStruct s = { .m_int = 1, .m_otherStruct = { .m_int = 2, .m_char = 'Ы' } }
              Ответить
              • Похоже, что так:
                Note: out-of-order designated initialization, nested designated initialization, mixing of designated initializers and regular initializers, and designated initialization of arrays are all supported in the C programming language, but are not allowed in C++.
                struct A { int x, y; };
                struct B { struct A a; };
                struct A a = {.y = 1, .x = 2}; // valid C, invalid C++ (out of order)
                int arr[3] = {[1] = 5};        // valid C, invalid C++ (array)
                struct B b = {.a.x = 0};       // valid C, invalid C++ (nested)
                struct A a = {.x = 1, 2};      // valid C, invalid C++ (mixed)

                Странно, что в сишке это реализовали, а в C++ всё ещё думают. Там могут возникнуть какие-нибудь сложности из-за особенностей языка?
                Ответить
      • во заебца. темплейтов подзвели!
        Ответить
    • return $pairs = ['govno' => 'shit', 'kod' => 'code'];
      Ответить
      • Где тут происходит преобразование массива пар ключ-значение в ассоциативный?
        Ответить
        • Он преобразовываает за щекой, а в исходнике всегда пишет преобразованный вореант.
          Ответить
          • Тяжёлая у него работа. А если придёт массив на триста тысяч записей?
            Ответить
          • Напомнило изречение одного препода (он читал информатику для студентов непрограммистских специальностей): «Не понимаю, зачем в ЯП нужна функция чтения файлов, ведь входные данные всегда можно записать в const и перекомпилировать программу».
            Ответить
            • Кстати, такой вопрос:
              Вот говорят, что машина Тьюринга и лямбда-исчисление эквивалентны для вычислений. А что с императивными программами? Как теория формализует ввод для программы?

              Допустим, программа под машину Тьюринга реализует чат-бота и общается с пользователем. В этом случае часть ввода пользователя будет зависеть от вывода чат-бота.
              Представим такую же программу под лямбда-исчисление. Здесь запускаемая функция
              * либо требует сразу весь ввод, и пользователь вынужден у себя просчитывать ходы чат-бота,
              * либо возвращает кортеж из фразы и функцию для следующего вызова,
              * какое-то монадическое значение или текст программы на C - для последующего запуска.
              Всё это выглядит чем-то неспортивным.
              Ответить
              • А как машина Тьюринга общается с пользователем? Там та же самая фигня - дописал на ленту ответ, ребутнул машину.
                Ответить
                • Именно поэтому я за "PHP": он ребутится после каждого запроса.
                  Ответить
                  • Хм, т.е. "машина тьюринга" эквивалентна "PHP"?
                    Ответить
                    • Вообще нет: программа на "PHP" может общаться с внешним миром: читать файлы, делать запросы к другим серверам и т. п.
                      Ответить
                      • > читать файлы
                        Файлы лежат на ленте...

                        > запросы к другим серверам
                        А тут согласен.
                        Ответить
                • С точки зрения МТ весь мир это лента.

                  Да собственно с точки зреня обычного комптьютера тоже: в елнту можно MOV
                  Ответить
                • У меня просто МТ ассоциировалась с Brainfuck, где можно делать ввод зависимым от вывода.
                  Вообще, физически можно любой кусок ленты переписать/перечитать в любое время, пока машина на него не наехала.
                  Ответить
                  • Ну а в лямбда-машину ты можешь передать функцию, которая ждёт ответа от юзера и возвращает разный результат в зависимости от него...
                    Ответить
                    • Как мой вариант "кортеж из фразы и функцию для следующего вызова"? Это да, только выглядит менее честно.

                      Хотя, теперь мне вмешательство в ленту тоже уже начинает казаться нечестным.
                      Ответить
              • Запись на ленту во время работы машины и возникающие при этом гонки, емнип, никот не рассматривает.
                Ответить
        • в этом яп массивы ассоциативны
          Ответить
          • пары то где?!
            Ответить
            • между запятыми
              Ответить
              • Это не пары, это элементы ассоциативного массива.
                Ответить
                • элементы, их 2, они являются парой. каждая пара отделена от другой пары запятой

                  "there is no spoon" (тм)
                  Ответить
              • Это не пары. Кого ты пытаешься наипать? Тут все программисты!
                Ответить
      • The => operator is just a synonym for a comma,

        они просто перла не знают
        Ответить
        • use Data::Dumper;
          
          my $pituh = [1 => 2 => 3 => 4 => 5];
          print Dumper(\$pituh);
          
          my %kurochka = (1 => 2 => 3 => 4 => 5);
          print Dumper(\%kurochka);

          Выводит:
          $VAR1 = \[
                      1,
                      2,
                      3,
                      4,
                      5
                    ];
          $VAR1 = {
                    '3' => 4,
                    '1' => 2,
                    '5' => undef
                  };

          Прикольно.
          Ответить
          • use Data::Dumper;
            
            my @peaceda = [1 => 2 => 3 => 4 => 5];
            print Dumper(\@peaceda);
            
            my @ggurda = (1 => 2 => 3 => 4 => 5);
            print Dumper(\@ggurda);

            Выводит:
            $VAR1 = [
                      [
                        1,
                        2,
                        3,
                        4,
                        5
                      ]
                    ];
            $VAR1 = [
                      1,
                      2,
                      3,
                      4,
                      5
                    ];
            Ответить
            • В Перле любые закорючки во что-нибудь сконпелируются, в отличие от других языков.
              Ответить
            • print Dumper({ 1 <= 2 => 3 <= 4 <=> 5 => 4 <= 3 <=> 2 => 1 })
              Ответить
              • смешно что <= это "less or eq" для чисел
                => это запаятая
                а <=> это компаратор который вертает -1, 0, 1 в зависмости от

                я хз какие у них приоритеты но будет форшмак в любом случае
                Ответить
                • Подсмотрел, что приоритеты убывают так: <=, <=>, =>.

                  И что сравнения не ассоциативны, поэтому цепочка <= (без добавления круглых скобок) не сконпелируется, то бишь -0.5 <= 0.0 <= 0.5 не подразумевает ни Си-шного 1 <= 0.5, ни Перл6-ового -0.5 <= 0.0 && 0.0 <= 0.5.
                  Ответить
                  • как там бабочка шестого перла?
                    ворочаеца?

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

                    надеюсь, к вечеру пройдет
                    Ответить
                    • в шестерку принесли фоформальные папараметры с указанием типа в сишкном ситле

                      sub fa(Int $foo)

                      интерфейсы (роли), классы

                      нгахуй все это в скри-скрип языке? буэ
                      Ответить
                      • Не поддавайтесь!

                        Признаюсь, сам не слежу ни за 6, ни за 5. Но совсем недавно у бабочки было обновление спецификации и реализации. Вот только от лозунга «Perl 6 is optimized for fun, short -Ofun» с их сайта веет обречённостью и печалью, кмк.
                        Ответить
                        • фофан у нас уже руби есть:)

                          >>-Ofun
                          а, я понял. Perl это когда бородатый сишник решил развлечься. И пятый тоже:)
                          Ответить
              • Мне он возвращает то {'1' => -1, '-1' => 1}, то {'-1' => 1, '1' => -1}, в зависимости от положения звёзд на небе. Можно использовать вместо подбрасывания монетки.
                Ответить
                • потому что у тебя в хеш два раза кладется для одного и то ге ключа значение
                  Ответить
                  • Нет, там всё по одному разу, просто в Пепе ключи хэшей никак не упорядочены.
                    Ответить
            • >>@peaceda = [1 => 2 => 3 => 4 => 5];

              мне кажется так делать не нужно
              ты поклал в массив "писдата" один елемент -- референсу на анонмный массив "1,2,3,4,5"
              Ответить
    • Перевёл на «C»:
      int main()
      {
          struct HashMap *map = createHashMap(100);
          if (!map) {
              printf("Map creating failed\n");
              return EXIT_FAILURE;
          }
       
          const char *pairs[2][2] = { {"govno", "shit"}, {"kod", "code"} };
       
          for (unsigned int i = 0; i < 2; i++) {
              mapAddKeyValue(map, pairs[i][0], pairs[i][1]);
          }
       
          for (unsigned int i = 0; i < 2; i++) {
              printf("map[%s] = %s\n", pairs[i][0], mapGetValue(map, pairs[i][0]));
          }
       
          freeHashMap(map);
          return EXIT_SUCCESS;
      }

      Полный код доступен по ссылке: https://ideone.com/3v5Urq
      Ответить
    • $arr = [['govno',  'shit'], ['kod', 'code']];
      
      // array(2) {
      //   ["govno"]=>
      //   string(3) "kod"
      //   ["shit"]=>
      //   string(4) "code"
      // }
      var_dump(array_combine(...$arr));


      Пруф: https://3v4l.org/aTW6G
      Ответить
    • * g o a t s e x * g o a t s e x * g o a t s e x *  
       g                                               g  
       o /     \             \            /    \       o  
       a|       |             \          |      |      a  
       t|       `.             |         |       :     t  
       s`        |             |        \|       |     s  
       e \       | /       /  \\\   --__ \\       :    e  
       x  \      \/   _--~~          ~--__| \     |    x  
       *   \      \_-~                    ~-_\    |    *  
       g    \_     \        _.--------.______\|   |    g  
       o      \     \______// _ ___ _ (_(__>  \   |    o  
       a       \   .  C ___)  ______ (_(____>  |  /    a  
       t       /\ |   C ____)/      \ (_____>  |_/     t  
       s      / /\|   C_____)       |  (___>   /  \    s  
       e     |   (   _C_____)\______/  // _/ /     \   e  
       x     |    \  |__   \\_________// (__/       |  x  
       *    | \    \____)   `----   --'             |  *  
       g    |  \_          ___\       /_          _/ | g  
       o   |              /    |     |  \            | o  
       a   |             |    /       \  \           | a  
       t   |          / /    |         |  \           |t  
       s   |         / /      \__/\___/    |          |s  
       e  |         / /        |    |       |         |e  
       x  |          |         |    |       |         |x  
       * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить

    Добавить комментарий