을 예상대로 작동하지루비 문자 및 숫자 정렬 다음과 같은 배열을 지정해,
=> ["A1", "A2", "A6", "A8", "B3", "B4", "B5", "B8", "B10", "B12"]
을 다음 (바닐라) 종류를 사용하여, 나는 얻을 :
irb(main):2557:0> y.sort{|a,b| puts "%s <=> %s = %s\n" % [a, b, a <=> b]; a <=> b}
A1 <=> A8 = -1
A8 <=> B8 = -1
A2 <=> A8 = -1
B5 <=> A8 = 1
B4 <=> A8 = 1
B3 <=> A8 = 1
B10 <=> A8 = 1
B12 <=> A8 = 1
A6 <=> A8 = -1
A1 <=> A2 = -1
A2 <=> A6 = -1
B12 <=> B3 = -1
B3 <=> B8 = -1
B5 <=> B3 = 1
B4 <=> B3 = 1
B10 <=> B3 = -1 # this appears to be wrong, looks like 1 is being compared, not 10.
B12 <=> B10 = 1
B5 <=> B4 = 1
B4 <=> B8 = -1
B5 <=> B8 = -1
=> ["A1", "A2", "A6", "A8", "B10", "B12", "B3", "B4", "B5", "B8"]
... 분명히 내가 원하는 바가 아닙니다. 나는 먼저 알파를 분리하고 숫자를 정렬하려고 시도 할 수 있다는 것을 알고 있지만, 그렇게하지 않아도되는 것처럼 보입니다.
가능한 큰주의해야 할 점은 우리가 루비를 사용하여 붙어있어 지금 :(그러나 심지어 루비 2.0.0이 같은 일을하고 위해 1.8.7 내가 여기 실종 무엇
제안을
첫 번째 직감은 올바른 것입니다. 이것들은 문자열이기 때문에 사전 식으로 정렬 될 것입니다. 번호를 주문의 요소로 고려하려면 번호와 문자를 분리하고 정렬 할 때 자신의 의지를 사용해야합니다. – Makoto
왜 * 문자열 * "B12"가 * 문자열 * "B2"앞에 정렬 될지 궁금합니다. 이것은 루비가 문자열을 정렬하는 방법이 아니라, * 모든 것이 문자열을 정렬하는 방법입니다. – meagar
당신은'y.sort_by {| s | [ "A1", "A2", "A6", "A8", "B3", "B4", "B5", " "B8", "B10", "B12"]'. 루비가 배열을 정렬하는 방법은 [Array # <=>] (http://ruby-doc.org/core-2.3.0/Array.html#method-i-3C-3D-3E)을 참조하십시오. –