跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 一个比较麻烦的排序需求,该怎么处理?
未分類
5 2 月 2021

一个比较麻烦的排序需求,该怎么处理?

一个比较麻烦的排序需求,该怎么处理?

資深大佬 : chillingkitten 8

项目有一个关键词搜索功能,数据来源是调三方接口,目前是直接透传返回 list. 排序是按其中一个字段的“数字字母自然顺序”,就是这样的:
假如关键词搜 “4”,可能的返回是
“24 号”,
“42 号”
“433 号”,
“4 号”

注意,这个字段中可能有文字,自然顺序数字是优先于文字的把,所以 ”42 号“要比”4 号”在前

现在突然要求改顺序,要让搜索的关键词开头的放在前面,比如上面的例子, 期望的效果是:
“4 号”,
“42 号”
“433 号”,
“24 号”

这个咋整啊。 三方接口方明确拒绝为这种定制的需求进行修改,只有自己接收到原始数据后自己 sorting. 但是试了下没头绪。 有什么工具类有这种功能么?

大佬有話說 (8)

  • 資深大佬 : jjwjiang

    自己重载一个比较器,以关键字开头的字符串有最高的权重,剩下调用 string 的比较不就行了吗

  • 資深大佬 : goinghugh

    他返回的是全局排序的,如果他不支持,只能你拿到数据后自己排序。但是你一次只拿一页的数据,你做的的话也只能是局部排序,效果可能并不好

  • 資深大佬 : 2379920898

    思路很简单的,接口返回的数据排序一下就 OK 。。给你个思路 ,搜索的关键字和每条数据比较,写条件。就 OK 了啊。

  • 資深大佬 : crazytudou

    取得 关键字 在字符串里的 index,然后再正常排序,时间复杂度比相互对比的小
    string index
    “24 号”, 1
    “42 号” 0
    “433 号”, 0
    “4 号” 0

  • 資深大佬 : arthas2234

    无分页自己排
    有分页对结果排序无解,只能从输入数据的时候做分割,数字和“号”之间插入一个比数字更靠前的分隔符

  • 主 資深大佬 : chillingkitten

    @crazytudou 这个思路有考虑过, 不过以上面例子来说,只能把 4 开头的记录放在前面,但是对于 4 开头的记录来说,用自然排序的话还是 42 号 – 433 号 – 4 号这样的吧。 现在想要的效果是 4 号-42 号-433 号 (其实后两个都不那么严格,但是刚好匹配的‘4 号’一定要在最前)

  • 資深大佬 : crazytudou

    @chillingkitten 你是不是写错了,排序要两个列都加进去,order by index, string 这样得出的结果会是
    string index
    4 号 0
    42 号 0
    433 号 0
    24 号 1
    正是你想要的结果没有错。

  • 資深大佬 : milkpuff

    把“号”去掉,排完再加回来

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具