是否可以使用PHP中的自然排序按多列对多维数组进行排序?这是一个例子.假设我有一个2D数组,例如,
$array[1]['Name'] = 'John';
$array[1]['Age'] = '20';
$array[1]['Code'] = 'ABC 12';
$array[2]['Name'] = 'John';
$array[2]['Age'] = '21';
$array[2]['Code'] = 'ABC 1';
$array[3]['Name'] = 'Mary';
$array[3]['Age'] = '20';
$array[3]['Code'] = 'ABC 10';
Run Code Online (Sandbox Code Playgroud)
我想按名称(ASC),然后按年龄(DESC)和代码(ASC)对这个数组进行排序,所有都将自然地排序.基本上这将是自然排序的array_multisort.
我在网上找到了很多关于这个主题的解决方案.不幸的是,它们只支持按一列排序,而不是多列排序.
我想按照以下方式对值列表进行排序:
- 4
- 5xa
- 8kdjfew454
- 9
- 10
- 999cc
- 乙
- c9
- c10cc
- c11
换句话说,有时被称为“自然排序”,即文本在有文本的地方按字母/字典顺序排序,但在有数字的地方按数字排序,即使两者混合在同一个字符串中。
无论如何,我找不到在 Solr (4.0 atm) 中执行此操作。是否有标准方法可以做到这一点或至少有一个可行的“食谱”?
我想以“自然顺序”对字典键进行排序。如果我有一本带键的字典
d = {"key1" : object, "key11" : object, "key2" : object, "key22" : object", "jay1" : object, "jay2" : object}
Run Code Online (Sandbox Code Playgroud)
我想对这本字典进行排序,结果是:
d = { "jay1" : object, "jay2" : object, "key_1" : object, "key_2" : object, "key_11" : object, "key_22" : object"}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Enum子类,其值使用其定义顺序作为其自然排序顺序,如下例所示:
@functools.total_ordering
class SelectionType(enum.Enum):
character = 'character'
word = 'word'
sentence = 'sentence'
paragraph = 'paragraph'
def __le__(self, other):
if not isinstance(other, SelectionType):
return NotImplemented
return self._positions[self] < self._positions[other]
SelectionType._positions = {x: i for i, x in enumerate(SelectionType)}
Run Code Online (Sandbox Code Playgroud)
是否有更直接的方法来获取枚举值在其定义顺序中的位置,或者更好的方法来执行此操作?
尝试按自然/人类可读顺序对字符串列表进行排序(升序).像下面的东西.
def list = ['f3', 'f10', 'f1', 'f12', 'f2', 'f34', 'f22','f20','f50', 'f5']
list.sort()
Run Code Online (Sandbox Code Playgroud)
我可以在GitHub中找到示例java代码.但寻找时髦的方式.任何帮助表示赞赏.
期望的输出:
f1, f2, f3, f5, f10, f12, f20, f22, f34, f50
Run Code Online (Sandbox Code Playgroud) 有人在 Emacs Lisp 中实现了自然顺序排序吗?我知道写起来并不难,但是借用别人的作品更容易。
(是的,我不敢相信我刚刚搜索了 Emacs 函数却找不到它。)
一个以前的计算器的问题介绍了如何以字母数字排序的字符串列表.我想用元组的第一个元素按字母数字排序元组列表.
例1:
>>> sort_naturally_tuple([('b', 0), ('0', 1), ('a', 2)])
[('0', 1), ('a', 2), ('b', 0)]
Run Code Online (Sandbox Code Playgroud)
例2:
>>> sort_naturally_tuple([('b10', 0), ('0', 1), ('b9', 2)])
[('0', 1), ('b9', 2), ('b10', 0)]
Run Code Online (Sandbox Code Playgroud)
更新: 要强调字母数字因素,请查看示例2.
这是我的文件夹结构.
/ home/files/encounter 9-22-11-0.jpg ../home/files/encounter 9-22-11- [n] .jpg
puts Dir.glob("/home/files/*.jpg")[0]
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,它显示第六个文件(索引5 =>/home/files /遇到9-22-11-5.jpg),但实际上我需要输出作为第一个文件(索引0 =>/home/files/encounter 9-22-11-0.jpg)
如何将文件排序为用户定义的排序顺序?喜欢
当我尝试..
.. [0] =>/home/files/encounter 9-22-11-5.jpg
.. [1] =>/home/files/encounter 9-22-11-21.jpg
.. [2] =>/home/files/encounter 9-22-11-39.jpg
但是,我需要
.. [0] =>/home/files/encounter 9-22-11-0.jpg
.. [1] =>/home/files/encounter 9-22-11-1.jpg
.. [2] =>/home/files/encounter 9-22-11-2.jpg
附加信息,排序也不起作用.
f = Dir.glob("/ home/files/*.jpg").排序
f [0] =>/home/files/encounter 9-22-11-0.jpg
f [0] =>/home/files /遇到9-22-11-1.jpg
f [0] =>/home/files/encounter 9-22-11-10.jpg
f [0] =>/home/files/encounter 9-22-11- 11.JPG
我有一些文件需要按名称排序,不幸的是我不能使用常规排序,因为我也想对字符串中的数字进行排序,所以我做了一些研究,发现我正在寻找的是什么natural sorting.
我尝试了这里给出的解决方案,它完美地工作.
然而,对于像串PresserInc-1_10.jpg并PresserInc-1_11.jpg导致特定的自然密钥算法失败,因为它仅匹配在这种情况下将是第一个整1和1,所以它抛出了排序.所以我认为可能有帮助的是匹配字符串中的所有数字并将它们组合在一起,所以如果我有PresserInc-1_11.jpg算法应该给我111回来,所以我的问题是,这可能吗?
这是一个文件名列表:
files = ['PresserInc-1.jpg', 'PresserInc-1_10.jpg', 'PresserInc-1_11.jpg', 'PresserInc-10.jpg', 'PresserInc-2.jpg', 'PresserInc-3.jpg', 'PresserInc-4.jpg', 'PresserInc-5.jpg', 'PresserInc-6.jpg', 'PresserInc-11.jpg']
是否有一种简单的方法按自然顺序(也称为人类顺序)对文件进行排序,即file9.csv出现在file10.csv之前?list.files()似乎没有排序顺序的选项.
其他语言有很多实现(例如这里),Rosetta Code只有C,Perl,Python等解决方案.