¿Cómo puedo generar una puntuación numérica para una cadena, que luego puedo usar para ordenar las cosas alfabéticamente?
(Me gustaría agregar objectIds a un conjunto ordenado redis basado en una propiedad de nombre. Esto necesita un puntaje numérico. Mi lista de cosas puede ser demasiado grande para ordenarlas todas a la vez, por lo tanto, quiero calificar cada elemento individualmente)
Las palabras anteriores en una lista alfabética deben tener una puntuación más baja, con 'a' = 0 .
Mi enfoque ingenuo hasta ahora; (posición alfabética de la letra de Reemplazar una letra con su posición alfabética )
function alphaScoreString(inputString) { let score = 0 inputString .trim() .toLowerCase() .split('') .map((letter, index) => { const letterNumber = parseInt(letter, 36) - 10 if (letterNumber >= 0) { score += letterNumber / (index + 1) } }) return score * 1000 }Esto no funciona, como
alphaScoreString('bb') 1500 alphaScoreString('bc') 2000 alphaScoreString('bbz') 9833.333333333334Puede ver que 'bbz' tiene una puntuación más alta que 'bc', mientras que debería ser más baja, ya que 'bbz' vendría antes que 'bc' en una lista alfabética.
Puede convertir cada carácter a su Unicode (y asegurarse de que cada carácter tenga 4 dígitos rellenando la cadena. Por ejemplo, "H" = 72 pero se rellena a 0072: al hacer una comparación palabra por palabra, aún puede determinar el "orden alfabético" de cada cadena:
var instring = "Hello World"; var output = ""; for(i=0; i<instring.length;i++){ const newchar = String(instring.charCodeAt(i)).padStart(4, '0'); output = output.concat(newchar) console.log(output); }Answer writen in python. char_codex = {'a':0.01, 'b':0.02, 'c':0.03, 'd':0.04, 'e':0.05, 'f':0.06, 'g':0.07, 'h':0.08, 'i':0.09, 'j':0.10, 'k':0.11, 'l':0.12, 'm':0.13, 'n':0.14, 'o':0.15, 'p':0.16, 'q':0.17, 'r':0.18, 's':0.19, 't':0.20, 'u':0.21, 'v':0.22, 'w':0.23, 'x':0.24, 'y':0.25, 'z':0.26} def alphabetic_score(word): bitwiseshift = '1' scores = [0.00] * len(word) for index, letter in enumerate(word.lower()): if index is 0: scores[index] = char_codex[letter] else: bitwiseshift = bitwiseshift+'00' scores[index] = char_codex[letter]/int(bitwiseshift) return sum(scores)