методы разделения массива, кроме нечетного / четного

0

это у меня есть сообщения пользователя, и я хочу разбить их на 3, но все, что приходит в голову, нечетно/даже вот так:

@Post1 = Post.where('post_id % 2 = 0')
@post2 = Post.where('post_id % 2 != 0')

есть способ добавить @post3 и разделить сообщения на 3 категории. это для исследовательских целей и спасибо..

  • 2
    Как насчет Post.all.in_groups_of(Post.count / 3) ? Помимо очевидного, post_id % 3 = 2 и т. Д.
  • 0
    спасибо @Phlip за участие, но я пытаюсь сделать 3 переменные, чтобы использовать их в представлении "@ post1 '' @ post2 '' @ post3 ', чтобы я мог вызывать их в своем представлении, а in_groups_of применяется только к одной переменной, и я не "Помимо очевидного, post_id% 3 = 2"
Показать ещё 2 комментария
Теги:
algorithm
sorting

1 ответ

1
Лучший ответ

Вы можете сделать это следующим образом:

@Post1 = Post.where('post_id % 3 = 0')
@post2 = Post.where('post_id % 3 = 1')
@post3 = Post.where('post_id % 3 = 2')

Это тот же подход, что и четный/нечетный. Оператор% возвращает мода деления, поэтому вы можете расширить его до любого числа, которое вы хотите. Во всяком случае, не думайте, что это хороший способ сделать это, особенно если ваше количество наборов слишком велико. Я бы предложил использовать in_groups_of (https://apidock.com/rails/Array/in_groups_of).

В вашем случае вы можете использовать in_groups_of следующим образом:

@posts = Post.all.in_groups_of((Post.count.to_f/3).ceil, false)

Таким образом вы можете назначить его следующим образом:

@Post1 = @posts[0]
@post2 = @posts[1]
@post3 = @posts[2]

или, я думаю, будет намного лучше, присваивает вам только переменную @posts. Затем, по вашему мнению, вы повторяете это следующим образом:

- @posts.each do |group_of_posts|
  - group_of_posts.each do |post|
    # do whatever you want

Таким образом, ваш код намного проще и проще в обслуживании. Удачи!

  • 0
    спасибо за ответ @Ronan Lopes, но как я могу использовать in_groups_of в моем случае и большое спасибо
  • 1
    одну минуту, и я обновлю ответ, показывая вам, как
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню