Ruby의 2D 어레이에 1 회 이상 발생하는 경우 계산
문제
정렬 된 배열이 있습니다.
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]]
길이없이 실행하면 항상 첫 번째 발생을 반환합니다.
이런 일을 계산할 수있는 방법이 있습니까?
편집하다:
죄송합니다. 새로운 질문으로 후속 질문을하겠습니다.
해결책
사용해보십시오 find_all
대신에 detect
. detect
첫 번째 경기를 반환합니다. 첫 번째 예에서는 그게 그렇습니다 array[3]
, 이것은 길이 2의 또 다른 배열입니다. 이것이 2를 반환하는 이유입니다 (배열의 경우 항상 2 또는 nil을 반환해야합니다). find_all
첫 경기 자체 대신 일치 배열을 반환하며 길이는 원하는 값입니다.
다른 팁
다음은 관련 걱정과 함께 원하는 것을하는 명확한 방법입니다.
array.count{|i| i[1] == array.last[1]}
제휴하지 않습니다 StackOverflow