2016-09-06 2 views
-1

Я искал в Интернете алгоритм сортировки, который сортирует записи таблицы «естественным» способом, так что 10 после 1 и так далее, но я не нашел ни одного решения, которое является « идеально подходит".Сортировка по строке «вес»

Теперь я работаю над своим собственным решением, чтобы выполнить алгоритм сортировки. Мой вопрос теперь, если он эффективен и применим для создания числа для каждой строки в строке таблицы на основе позиции их букв в abc и позиции этого письма в конкретной строке, а затем сортировки по этому созданному номеру?

Пример:

abc будет a = 1; b = 2; c= 3, а затем «вес» для каждой буквы должна быть выше, с длиной строки:

a = 1 * 1(pos in str); b = 2 * 2; c = 3 * 3

так abc бы 14 в виде числа.

Я не хочу, чтобы это был настоящий естественный вид.

Я использовал библиотеки и встроенную функцию Javascript «.sort()», но они не работают для строк, таких как 92593c17-5183-4db1-b4bd-d538abb4124b или ed06d686-8a04-4ae1-9500-975fb85a49d9, поэтому это не подходит для меня.

Так это хороший способ сортировки строк по их букве «вес»?

+0

Что о localCompare? http://www.w3schools.com/jsref/jsref_localecompare.asp –

+0

Этот тип сортировки называется Lexographic. Может быть, прыгающая точка –

+0

вы можете передать функцию компаратора в стандарт .sort() javascript, который решает, если одна строка тяжелее другой. – softwarenewbie7331

ответ

1

Посмотрите на этот небольшой пример с localeCompate():

var s1 = '92593c17-5183-4db1-b4bd-d538abb4124'; 
 
var s2 = 'ed06d686-8a04-4ae1-9500-975fb85a49d9'; 
 
var s3 = '10'; 
 
var s4 = '1'; 
 
var s5 = 'a'; 
 
var s6 = 4; 
 

 
$('#1').text(s1 + ' before ' + s2 + ': ' + (s1.toString().localeCompare(s2.toString()) == -1 ? 'yes' : 'no')); 
 
$('#2').text(s2 + ' before ' + s3 + ': ' + (s2.toString().localeCompare(s3.toString()) == -1 ? 'yes' : 'no')); 
 
$('#3').text(s3 + ' before ' + s4 + ': ' + (s3.toString().localeCompare(s4.toString()) == -1 ? 'yes' : 'no')); 
 
$('#4').text(s4 + ' before ' + s5 + ': ' + (s4.toString().localeCompare(s5.toString()) == -1 ? 'yes' : 'no')); 
 
$('#5').text(s5 + ' before ' + s6 + ': ' + (s5.toString().localeCompare(s6.toString()) == -1 ? 'yes' : 'no')); 
 
$('#6').text(s6 + ' before ' + s1 + ': ' + (s6.toString().localeCompare(s1.toString()) == -1 ? 'yes' : 'no'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p id='1'></p> 
 
<p id='2'></p> 
 
<p id='3'></p> 
 
<p id='4'></p> 
 
<p id='5'></p> 
 
<p id='6'></p>

+0

это не работает для чистых чисел ... – Snickbrack

+0

Это не повод для нисходящего! Просто используйте toString() для всего! Я изменил код! –

+0

успокоить голос-гангстер. Я использовал свое решение в сочетании с 'localeCompare' ... – Snickbrack

Смежные вопросы