问题标签 [natural-sort]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何在javascript中对字符串进行数字排序
我想对字符串数组(在javascript中)进行排序,以便将字符串中的数字组作为整数而不是字符串进行比较。我不担心有符号或浮点数。
例如,结果不应该["a1b3","a9b2","a10b2","a10b11"]
是["a1b3","a10b11","a10b2","a9b2"]
最简单的方法似乎是将每个字符串拆分为围绕数字组的边界。是否有一种模式可以传递给 String.split 以在字符边界上拆分而不删除任何字符?
"abc11def22ghi".split(/?/) = ["abc","11","def","22","ghi"];
或者是否有另一种方法来比较不涉及拆分字符串的字符串,也许是通过用前导零填充所有数字组,使它们的长度相同?
"aa1bb" => "aa00000001bb", "aa10bb" => "aa00000010bb"
我正在使用任意字符串,而不是具有特定数字组排列的字符串。
编辑:
我喜欢/(\d+)/
Gaby 的一个衬垫来拆分阵列。向后兼容的程度如何?
以可用于重建原件的方式解析字符串一次的解决方案比此比较功能更有效。没有一个答案处理一些以数字开头的字符串,而另一些则不是,但这很容易补救,并且在原始问题中并不明确。
结果:"!!,9,9.5,10,a3,a3b,a3b3,a3b20,a3b100,a20,a100,~~"
octave - 使用 Octave 将目录中的文件自然排序到单元格数组中
我有由另一个程序/用户生成的文件,其名称为“jh-1.txt、jh-2.txt、...、jh-100.txt、...、jh-1024.txt”。我正在从这些文件中提取一列,处理数据并输出到一个新矩阵。唯一的问题是 Octave 在读取文件时使用的是 ASCII 排序而不是自然排序。因此,输出矩阵不是以自然方式排序的。我的问题是,Octave 可以按自然顺序对文件名进行排序吗?我以标准方法获取文件名:
我无法重命名文件,因为这是另一个用户的脚本。他们在 Windows 机器上,并且已经使用 Cygwin 安装了 Octave,我不想让他们使用命令行比他们需要的更多,因为他们不熟悉它。或者,将输出与文件名放在一列中会很好,但是我也没有想出来(我自己对 Octave 有点菜鸟)。这样用户就可以使用 Excel(他们熟悉的)对列进行排序。
mysql - MySQL命令STRING为INT并插入
我有一个像这样的数据集:
打印 ID 的格式可以是:/([0-9]+)([ae]{1})?/
我想要的是先按数字订购它们,如果有的话再按字母订购。如果没有字母,则它是该数字顺序中的第一个。所以结果应该是这样的:
我尝试了 ORDER BY (print_id + 0) 它正确地对数字进行排序,但它并没有完全做到这一点。有什么建议么?
c# - 用于自然排序的 IComparer
一段时间以来,我一直在寻找解决方案。
当我使用字符串排序对以下内容进行排序时,我有一个列表:
我真的希望列表是:
数字排序也不起作用。
mysql - MySQL ORDER_BY 字符串中的部分整数
我在 MySQL 数据库中有一系列“编号”的 varchar 字段:
我想按照上面列出的顺序订购它们。但是,一个简单的ORDER_BY table.name
会产生如下内容:
这是有道理的,因为 MySQL 将整个字段视为字符串 (varchar)。但是,我尝试了多种排序方法,包括CAST(name AS DECIMAL)
和name + 0
。这只会按小数部分排序,忽略字符串部分。这些都不起作用,因为我需要先排序name
,然后再按尾随小数排序。
我试过ORDER_BY name, name + 0
了,但似乎没有任何效果。我如何执行ORDER_BY
,然后ORDER_BY
在该子集中执行?(我认为这会奏效)。
python - 如何比较 MySQL 中的版本字符串(“xyz”)?
我的表中有固件版本字符串(如“4.2.2”或“4.2.16”)
如何比较、选择或排序它们?
我不能使用标准字符串比较:SQL 看到的“4.2.2”大于“4.2.16”
作为版本字符串,我希望 4.2.16 大于 4.2.2
我想考虑固件版本中可以包含字符:4.24a1、4.25b3 ...为此,通常带有字符的子字段具有固定长度。
如何进行 ?
sql - PostgreSQL ORDER BY 问题 - 自然排序
我ORDER BY
对下表有一个 Postgres 问题:
要将新记录插入表中,
- 我选择最后一条记录
SELECT * FROM employees ORDER BY em_code DESC
- 使用 reg exp 从 em_code 中剥离字母并存储在
ec_alpha
- 将 remate 部分转换为整数
ec_num
- 加一
ec_num++
- 用足够的 zeor 填充并
ec_alpha
再次添加前缀
当em_code
达到 EM1000 时,上述算法失败。
第一步将返回 EM999 而不是 EM1000 ,它将再次生成 EM1000 作为 new em_code
,打破唯一键约束。
知道如何选择 EM1000 吗?
jquery - 如何使用自然排序插件制作工作数据表?
我见过一些类似的问题,但在我的情况下没有正确答案。
我使用DataTables插件对一些表进行排序。
但是我们不能像数字那样对数据进行排序,而它们不是(坚果;-p)。例如,我们不能像这样对格式化的价格进行排序:
- 2 150 000 欧元
- 4 500 000 欧元
- 225 000 欧元</li>
所以我尝试包含一个名为“自然排序”的DataTables 插件。但它似乎不起作用,我可能会犯一些错误,但我找不到它们。
任何帮助将不胜感激。
您需要查看/测试它的所有内容:JSfiddle(尝试对列进行排序......)
mysql - 在 mysql ORDER BY 子句中用 0 填充字符串中间以尊重“真实”数字顺序
在我的管理界面中,我有一个子域列表,它们遵循以下逻辑:
这些存储在mysql中。我需要按数字顺序列出它们,但是由于我在 之后缺少前导 0 node-k
,因此它对它们进行排序:
有节点有不同的字母,所以node-j_
会出现在前面node-k_
。ORDER BY node ASC
显然可以很好地处理字母,但是数字是一个烦人的问题。
有没有办法让 ORDER BY 子句把它们按正确的顺序排列?这是一个仅限管理员的功能,因此性能并不是真正的问题。
sql - 在文本和数字列中排序 vb.net 自然排序
我在一列excel中有一个文本和数字数据。数据为 1,2,3,A,B,C,D,10,11,12。我想通过 SQL 对这些进行排序。我想按以下顺序获取数据 1,2,3,10,11,12,A,B,C,D。
所以请任何人建议我如何做到这一点。