如何对 vim 中的字典项目进行排序
How to sort a dictionary items in vim
如何使用vim脚本中的排序函数对字典进行排序?。帮助文档似乎没有提供有关如何对字典中的特定元素进行排序的明确信息。
例如:我通过调用 getqflist() 获取 quickfix 项。如何根据行号对这个 quickfix 字典项目进行排序?
定义你的比较函数,将 getqflist()
的结果保存到一个变量中,call sort(v, f)
示例:
function! LineLessThan(leftArg, rightArg)
if a:leftArg['line'] == a:rightArg['line']
return 0
elseif a:leftArg['line'] < a:rightArg['line']
return -1
else
return 1
endif
endfunction
function! KeyLessThan(leftArg, rightArg)
if a:leftArg['key'] ==# a:rightArg['key']
return 0
elseif a:leftArg['key'] <# a:rightArg['key']
return -1
else
return 1
endif
endfunction
let g:a = [{'line': 3, 'key': 'd'}, {'line': 1, 'key': 'e'}, {'line': 5, 'key': 'b'}, {'line': 2, 'key': 'a'}, {'line': 4, 'key': 'c'}]
call sort(g:a, function("LineLessThan"))
echo g:a
call sort(g:a, function("KeyLessThan"))
echo g:a
如何使用vim脚本中的排序函数对字典进行排序?。帮助文档似乎没有提供有关如何对字典中的特定元素进行排序的明确信息。
例如:我通过调用 getqflist() 获取 quickfix 项。如何根据行号对这个 quickfix 字典项目进行排序?
定义你的比较函数,将 getqflist()
的结果保存到一个变量中,call sort(v, f)
示例:
function! LineLessThan(leftArg, rightArg)
if a:leftArg['line'] == a:rightArg['line']
return 0
elseif a:leftArg['line'] < a:rightArg['line']
return -1
else
return 1
endif
endfunction
function! KeyLessThan(leftArg, rightArg)
if a:leftArg['key'] ==# a:rightArg['key']
return 0
elseif a:leftArg['key'] <# a:rightArg['key']
return -1
else
return 1
endif
endfunction
let g:a = [{'line': 3, 'key': 'd'}, {'line': 1, 'key': 'e'}, {'line': 5, 'key': 'b'}, {'line': 2, 'key': 'a'}, {'line': 4, 'key': 'c'}]
call sort(g:a, function("LineLessThan"))
echo g:a
call sort(g:a, function("KeyLessThan"))
echo g:a