Как естественным образом сортировать массив многоточечных чисел в ruby ​​[duplicate]

Пожалуйста, проверьте, как только выбранная база данных не была вызвана, потому что некоторая база данных не выбрана

Проверьте

mysql_select_db('database name ')or DIE('Database name is not available!');

перед запросом MySQL, а затем перейдите к следующему шагу

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

f($result === FALSE) {
    die(mysql_error());
10
задан Chaim Leib Halbert 22 October 2015 в 22:02
поделиться

3 ответа

Ruby поставляется с классом Gem, который знает о версиях:

ar = ['10.0.0b12', '10.0.0b3', '10.0.0a2', '9.0.10', '9.0.3']

p ar.sort_by { |v| Gem::Version.new(v) }
# => ["9.0.3", "9.0.10", "10.0.0a2", "10.0.0b3", "10.0.0b12"]
21
ответ дан steenslag 23 August 2018 в 15:44
поделиться

Если вы интерпретируете это как «сортировать по каждому сегменту цифр», тогда вы будете обрабатывать ваш пример ввода выше:

input.map{ |ver| ver.split(%r{[^\d]+}).map(&:to_i) }.zip(input).sort.map(&:last)
=> ["9_0", "9_1", "10_0b3", "10_0b12"]

То есть,

  • для каждого значения, например 10_0b3
  • , разделенного на любую длину нецифровых символов, например ["10","0","3"]
  • отбрасывает каждый разрядный сегмент на целое число, например [10,0,3]
  • zip с исходным входом, дает [[[10, 0, 12], "10_0b12"], [[10, 0, 3], "10_0b3"], [[9, 0], "9_0"], [[9, 1], "9_1"]]
  • sort, в силу [10,0,3] < [10,0,12]
  • получить последнее значение каждого элемента, которое является исходным входным значением, которое соответствует каждому обрабатываемому сортируемому значению

. Теперь предоставлено, это все еще довольно обычай - номера версий, такие же простые, как «9_0a» против «9_0b», не будут обрабатываться, обе будут отображаться [9,0] - так что вам, возможно, придется еще больше подстроить его, но, надеюсь, это приведет вас к жизнеспособному пути.

EDIT: Пример ввода выше изменен, поэтому я изменил регулярное выражение, чтобы убедиться, что цифра -мачание жадно, и с этим он все еще держится:

irb(main):018:0> input = ['10.0.0b12', '10.0.0b3', '9.0.10', '9.0.3']
=> ["10.0.0b12", "10.0.0b3", "9.0.10", "9.0.3"]
irb(main):025:0> input.map{ |ver| ver.split(%r{[^\d]+}).map(&:to_i) }.zip(input).sort.map(&:last)
=> ["9.0.3", "9.0.10", "10.0.0b3", "10.0.0b12"]
2
ответ дан DreadPirateShawn 23 August 2018 в 15:44
поделиться

В конкретном случае, когда вы работаете с NuGet и хотите анализировать, сравнивать или сортировать по собственной собственной схеме управления версиями NuGet из кода Ruby, теперь есть следующее:

https: // rubygems.org/gems/nuget_versions

Я создал его специально для решения этой проблемы. Номера версий NuGet немного странны, они представляют собой надмножество SemVer, которое также позволяет использовать 4 компонента вместо 3.

0
ответ дан Jonathan Gilbert 23 August 2018 в 15:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: