Nano Hash - криптовалюты, майнинг, программирование

Повернуть массив символов

Какие есть альтернативы этому методу

 tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;

чтобы повернуть влево массив символов с 4 элементами

02.06.2012

  • Разве это не очень похоже на этот вопрос. Итак, вы хотите сдвинуть весь массив влево, а затем добавить прежний первый элемент в конец. stackoverflow.com/questions/2381245 / 02.06.2012

Ответы:


1

Использование дженериков и вращение на месте (спасибо Jon Skeet за предложение):

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    Array.Copy(source, 1, source, 0, source.Length - 1);
    source[source.Length - 1] = temp;
}

Они должны работать для любого массива длиной не менее 2 и для любого массива.

Если производительность критична, а массивы всегда маленькие, используйте это:

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    for (int i = 0; i < source.Length - 1; i++)
        source[i] = source[i + 1];
    source[source.Length - 1] = temp;
}

Первый метод является самым быстрым с большими массивами, но для 4 элементов он почти такой же быстрый, как метод из вашего примера.

02.06.2012
  • Любая причина, по которой вы не вращались на месте, как в исходном коде OP? (Array.Copy отлично работает с этим.) 02.06.2012
  • Я не думал об этом. Я сделаю это редактирование как альтернативный способ сделать это. 02.06.2012
  • Хорошо, но в два раза медленнее простого c[0] = c[1]; 02.06.2012
  • Действительно ли производительность этого является проблемой в вашей программе? Не выполняйте микрооптимизацию, когда в этом нет необходимости. 02.06.2012

  • 2

    Альтернативой повороту массива является поворот индекса при доступе к массиву, т.е. вы создаете виртуальное кольцо.

    int origin = someValue;
    int x = c[(i + origin) % c.Length];
    
    02.06.2012
  • Хорошо, но я ищу физическую ротацию 02.06.2012

  • 3

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

    так что попробуйте:

    int temp = c[0]
    for(int i = 0; i < c.count; i++)
    {
        if (i == (c.count - 1))
        {
            c[i] = temp;
            break;
        }
        c[i] = c[i + 1];
    }
    
    02.06.2012

    4

    Выполняйте работу за один шаг.

    Using System.Linq;
    
     int[]  ar = { 1,2,3,4,5};
     int k = 1; //
     int[] ar1=  ar.Skip(k)            // Start with the last elements
                 .Concat(ar.Take(k)) // Then the first elements
                 .ToArray();
    

    Выход -- 2,3,4,5,1

    02.06.2012
  • Я ищу ротацию, а не смену 02.06.2012
  • не работает более 5 (т.е. длина массива) или для отрицательных чисел 17.07.2013

  • 5

    В ruby ​​вращение массива можно сделать в одну строку.

    def array_rotate(arr)
        i, j = arr.length - 1, 0
        arr[j],arr[i], i, j = arr[i], arr[j], i - 1, j + 1 while(j<arr.length/2)
        puts "#{arr}"
    end
    
    24.07.2018
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..