정수를 문자 등가로 변환합니다. 여기서 0 = > a, 1 = > b 등
저는 알파벳을 기준으로 정수를 문자 등가물로 변환하고 싶습니다.예를 들어,
0 => a
1 => b
2 => c
3 => d
등. 어레이를 구축하고 필요할 때 찾아 볼 수 있는데 이를 위해 내장된 기능이 있는지 궁금합니다.구글을 통해 찾은 예시는 모두 ASCII 값으로 작동하는 것이지 알파벳에서 문자의 위치가 아닙니다.
소문자를 원하는 경우:
var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...
97은 소문자 'a'의 ASCII 코드입니다.대문자를 원하면 97을 65로 바꿉니다('A' 대문자).만약n > 25
, 당신은 글자의 범위를 벗어날 것입니다.
다른 알파벳으로 확장할 경우 휴대성이 향상됩니다.
char='abcdefghijklmnopqrstuvwxyz'[code]
또는 (사랑하는 IE와 더 잘 호환되도록):
char='abcdefghijklmnopqrstuvwxyz'.charAt(code);
다중 문자 문자열을 돌려받는 것이 괜찮다면 임의의 양의 인덱스를 지원할 수 있습니다.
function idOf(i) {
return (
(i >= 26 ? idOf(((i / 26) >> 0) - 1) : "") +
"abcdefghijklmnopqrstuvwxyz"[i % 26 >> 0]
);
}
[0, 1, 25, 26, 27, 701, 702, 703].map(idOf);
// ['a', 'b', 'z', 'aa', 'ab', 'zz', 'aaa', 'aab']
(정밀오류 정밀검사 미실시 :)
간단한 답은 (26자)입니다.
String.fromCharCode(97+n);
공간이 중요한 경우 다음(20자)을 수행할 수 있습니다.
(10+n).toString(36);
추가 바이트로 무엇을 할 수 있을지 생각해 보세요!
숫자를 기본 36으로 변환하면 다음과 같은 문자가 표시됩니다.
0123456789abcdefghijklmnopqrstuvwxyz
^ ^
n n+10
10으로 오프셋을 조정하면 문자가 시작됩니다.a
대신에0
.
클라이언트 측의 두 가지 예제를 얼마나 빨리 실행할 것인지 완전히 확신할 수는 없습니다.
나는 마법의 숫자를 사용하는 모든 솔루션이 마음에 들지 않습니다.97
아니면36
.
const A = 'A'.charCodeAt(0);
let numberToCharacter = number => String.fromCharCode(A + number);
let characterToNumber = character => character.charCodeAt(0) - A;
이것은 대문자를 가정하고 'A'를 0에서 시작합니다.
Javascript의 String.fromCharCode(code1, code2, ..., codeN)는 무한히 많은 인수를 사용하여 해당 ASCII 값이 code1, code2, ...codeN인 문자열을 반환합니다.97은 ASCII에서 'a'이므로 색인에 97을 추가하여 색인을 조정할 수 있습니다.
function indexToChar(i) {
return String.fromCharCode(i+97); //97 in ASCII is 'a', so i=0 returns 'a',
// i=1 returns 'b', etc
}
사용하다String.fromCharCode
. 이것은 ASCII의 처음 128자와 일치하는 유니코드 값에서 문자열을 반환합니다.
var a = String.fromCharCode(97);
여기 있습니다: (a-zA-Z)
function codeToChar( number ) {
if ( number >= 0 && number <= 25 ) // a-z
number = number + 97;
else if ( number >= 26 && number <= 51 ) // A-Z
number = number + (65-26);
else
return false; // range error
return String.fromCharCode( number );
}
입력: 0-51, 그렇지 않으면 false(범위 오류)를 반환합니다.
OR:
var codeToChar = function() {
var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
return function( code ) {
return abc[code];
};
})();
범위 오류의 경우 정의되지 않은 값을 반환합니다.참고: 어레이는 한 번만 생성되며 폐쇄로 인해 새로운 코드 ToChar 기능을 사용할 수 있습니다.첫 번째 방법보다 훨씬 빠르다고 생각합니다(기본적으로 검색일 뿐입니다).
해라
(n+10).toString(36)
chr = n=>(n+10).toString(36);
for(i=0; i<26; i++) console.log(`${i} => ${ chr(i) }`);
@mikemaccana의 훌륭한 솔루션의 유일한 문제는 비용이 많이 들고 성능 면에서 바이너리 >> 연산자를 사용한다는 것입니다.여러분의 동료들이 좀 더 쉽게 읽을 수 있도록 그의 훌륭한 업적에 대한 수정을 제안합니다.
const getColumnName = (i) => {
const previousLetters = (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '');
const lastLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26];
return previousLetters + lastLetter;
}
또는 원라이너로
const getColumnName = i => (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26];
예:
getColumnName(0); // "A"
getColumnName(1); // "B"
getColumnName(25); // "Z"
getColumnName(26); // "AA"
getColumnName(27); // "AB"
getColumnName(80085) // "DNLF"
TypeScript 작업 기능을 찾고 있다면 다음을 수행합니다.
public numericValue = (alphaChar: any) => alphaChar.toUpperCase().charCodeAt(0) - 64;
public alphaValue = (numericDigit: any) =>
String.fromCharCode(64 + numericDigit) : '';
당신은 다음과 같은 여러 가지 수표를 만들 수 있습니다.(numericDigit >= 1 && numericDigit <= 26) ?
요구 사항에 따라 내부 기능 본체.
대문자를 원하는 경우:
function numberToLetter(num){
var alf={
'0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G'
};
if(num.length== 1) return alf[num] || ' ';
return num.split('').map(numberToLetter);
}
예:
numberToLetter('023')는 ["A", "C", "D"]입니다.
numberToLetter('5')는 "F"입니다.
언급URL : https://stackoverflow.com/questions/3145030/convert-integer-into-its-character-equivalent-where-0-a-1-b-etc
'programing' 카테고리의 다른 글
팬더 데이터 프레임을 위치별로 자르는 방법은? (0) | 2023.11.01 |
---|---|
MySQL이 null/empty를 반환하는지 확인하는 방법은 무엇입니까? (0) | 2023.11.01 |
Oracle 데이터 유형의 문자열 값을 코드로 결정하려면 어떻게 해야 합니까? (0) | 2023.11.01 |
임베디드 시스템에서의 malloc 동작 (0) | 2023.11.01 |
Maria로 전환한 후 MATCH 쿼리 문제DB (0) | 2023.11.01 |