Arhn - архитектура программирования

Вложенный цикл

Я новичок в Smalltalk, после того, как я изучил темы в целом, и я подумал, что готов начать свой проект, но когда я начал, я просто застрял в выполнении вложенных циклов for в самом начале. Я искал эту проблему, но примеры в Интернете не соответствовали моим простым потребностям, я просто хочу получить индексы циклов для их использования. Возможно, эта тема поможет мне и будущим начинающим, так что спасибо от меня и от их имени :)

Я не знаю, легко ли это найти или выполнимо, но я попытался сделать

1 to: 25 do: [[:a |1 to: 80 do: [:b |  a , b printString ,' '],cr]].

Я просто хочу объединить числа как

11 12 13 14 ..180
21 22 23 ...
.
.
251 252 ... 2580 

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

Я использую Pharo 3.0, если хотите знать.


Ответы:


1

Я не уверен, есть ли лучший способ, чем преобразование в строки. Но если вы хотите пойти по этому пути, попробуйте распечатать или проверить в рабочей области:

((1 to: 25) collect: [ :a | (1 to: 80) collect: [ :b | a printString , b printString ]]) flattened.

С помощью do: aBlock вы оцениваете блок для каждого элемента в приемнике, а с помощью
collect: aBlock вы собираете результат оценки каждого блока в новую коллекцию.

В зависимости от того, что вы собираетесь делать, вам, возможно, придется преобразовать полученные строки обратно в числа.

07.06.2014
  • Спасибо, что указали разницу тоже 07.06.2014

  • 2

    Ваш код работает нормально (за исключением отсутствующего сообщения #printString для a и неправильной вложенности блоков), но, как говорит @MartinW, вы не используете возвращаемое значение блока. Вместо этого вы можете сделать (чтобы сохранить как можно больше вашего текущего кода) следующее (мне нравится кодировать более явным образом):

    Transcript open.
    1 to: 25 do: [ :a | 
        1 to: 80 do: [ :b | 
            Transcript
                show: a printString;
                show: b printString;
                show: ' ' ].
        Transcript cr ].
    
    07.06.2014
  • Спасибо, открытая часть расшифровки мне тоже очень помогла :) 07.06.2014

  • 3

    Скрипучий/фараонский способ собрать в одну коллекцию из вложенных циклов — использовать промежуточный поток, как в этом фрагменте:

    String streamContents: [:aStream |
        1 to: 25 do: [:a |
            1 to: 80 do: [:b |
                aStream
                    print: a;
                    print: b;
                    space]]].
    

    Или, если вы хотите создать массив чисел:

    Array new: 25*80 streamContents: [:aStream |
        1 to: 25 do: [:a |
            1 to: 80 do: [:b |
                aStream nextPut: (a printString , b printString) asNumber]]].
    
    08.06.2014
  • @MartinW Использование потока не особенно Squeakish, но сообщения streamContents: и new:streamContents: были введены в Squeak. По крайней мере, в st80/Visualworks их не было. Я не знаю, был ли он представлен в последних версиях VW или других версиях Smalltalk... 10.06.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..