Считать, если в 2d массиве в Ruby более 1 вхождения - PullRequest
1 голос
/ 22 октября 2009

У меня есть отсортированный массив:

array = [[4, 13], [1, 12], [3, 8], [2, 8], [0, 3]]

Что показывает мне позицию (массив [n] [0]) и количество вхождений этой позиции (массив [n] [1]).

Мне нужно проверить, есть ли в одном и том же элементе массива число совпадений с последним элементом.

Я думал, что смогу сделать это с помощью:

array.detect {|i| i[1] == array.last[1] }.length

Но он возвращает 2 для указанного выше массива и, похоже, также возвращает 2 для следующего массива:

array = [[4, 13], [1, 12], [3, 8], [2, 3], [0, 3]]

Когда я запускаю его без длины, он всегда возвращает первое вхождение.

Есть ли способ получить это для подсчета случаев?

EDIT:

Извините, задайте мой следующий вопрос в новом вопросе.

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Попробуйте использовать find_all вместо detect. detect возвращает первое совпадение. В вашем первом примере это array[3], который является другим массивом длины 2. Поэтому он возвращает 2 (он всегда должен возвращать 2 или ноль для ваших массивов). find_all вернет массив совпадений (вместо самого первого совпадения), а его длина будет тем значением, которое вы хотите.

1 голос
/ 22 октября 2009

Вот более ясный способ делать то, что вы хотите, без каких-либо связанных с этим забот.

array.count{|i| i[1] == array.last[1]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...