检索内容排序

作者: 李贤立 | 来源:发表于2017-07-06 01:25 被阅读104次

在一个庞大的数据源里要对关键字搜索的结果进行排序。排序要求:

1,字数少的排前面;

2,字数相同的,关键字靠前的排前面。

思路:可以把检索到的结果(一个数组),扩展为一个二维数组,二维数组的元素都是三个:检索结果,检索结果的长度,关键字在检索结果中的位置。

第一步,以检索结果的长度先排序,可以冒泡排序。

第二步,进行关键字位置排序,可以冒泡排序。前提:需要相同的关键字作为一个数据源数组。

转变:把第一步和第二步的前提结合,重新思考,要得到相同长度的关键字数组,可以设一个宏,检索词条长度的最大值(我以所有词牌名为例 SCIMostCipaimingLength),由1开始遍历,分别建立一个数组盛放,遍历结束,立即移除子数组为空的元素,得到检索结果长度的排序。由此不需要专门以检索结果的长度进行排序,原来的二维数组三个元素可以简化为两个元素。但是二维数组最终须扩展成为四维数组。

以下为验证成功的代码。数据源是1667个词牌名。

```

/** *  排序 *  字数少的排前面,相同字数关键字排前面 *  @param array  原有数组 *  @param crucial 关键字 *  return 排好序的数组 */- (NSArray *)sequenceSearchResultWithArray:(NSArray*)array crucial:(NSString *)crucial {    NSMutableArray*> *arrayM = [NSMutableArray array];    // 字数从多到少排序    for (NSInteger i = 0; i < SCIMostCipaimingLength; i ++) {        NSMutableArray*arr1 = [NSMutableArray array];        [array enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            if (obj.length == i) {                NSMutableArray *arr = [NSMutableArray arrayWithCapacity:2];                [arr addObject:obj];                [arr addObject:[NSNumber numberWithUnsignedInteger:[obj rangeOfString:crucial].location]];                [arr1 addObject:arr];            }        }];        [arrayM addObject:arr1];    }    // 移除个数为空的元素    NSMutableArray*arrM = [NSMutableArray array];    for (NSInteger i = SCIMostCipaimingLength - 1; i >= 0; i --) {        [arrM addObject:arrayM[i]];    }    [arrM enumerateObjectsUsingBlock:^(NSArray * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {        if (obj.count == 0) {            [arrayM removeObjectAtIndex:arrM.count - idx - 1];        }    }];    // 相同的字数,关键字靠前的排前面    [arrayM enumerateObjectsUsingBlock:^(NSMutableArray* _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {        // 冒泡排序        for (int i = 0; i < obj.count - 1; i++) {            for (int j = 0; j < obj.count - 1 - i; j++) {                if ([obj[j][1] intValue] > [obj[j + 1][1] intValue]) {                    NSMutableArray *temp = obj[j];                    obj[j] = obj[j + 1];                    obj[j + 1] = temp;                }            }        }    }];    // 重新获取字符串数组    NSMutableArray *realArray = [NSMutableArray array];    [arrayM enumerateObjectsUsingBlock:^(NSMutableArray* _Nonnull arr1, NSUInteger idx, BOOL * _Nonnull stop) {

[arr1 enumerateObjectsUsingBlock:^(NSMutableArray * _Nonnull arr2, NSUInteger idx, BOOL * _Nonnull stop) {

[realArray addObject:arr2.firstObject];

}];

}];

return [realArray mutableCopy];

}

```

相关文章

  • 检索内容排序

    在一个庞大的数据源里要对关键字搜索的结果进行排序。排序要求: 1,字数少的排前面; 2,字数相同的,关键字靠前的排...

  • DSL语法示范

    1、检索、排序 terms表示查询的内容只要满足任意一个都被搜索出来sort节点指定排序字段 {"query": ...

  • Mysql入门(命令行)--排序检索数据

    检索排序数据语句select aaa from bbb order by aaa 单列排序

  • 检索模型与检索排序

    1. 用户查询与返回结果相关度度量 1.1 相似性计算:空间向量余弦夹角 https://www.jianshu....

  • 3. 排序检索数据

    排序检索数据 排序数据 关系数据库设计理论认为,若不规定排序顺序,则不应该假定检索出的数据的顺序有任何意义 用OR...

  • SQL语句范例

    检索多个列(SELECT) 检索某列,并排序(ORDER BY) ORDER BY语句必须是SELECT语句的最后...

  • 排序检索数据

    字句(Clause),SQL语句都是由若干的子句组成的,这些子句有些是必需的,有些是可选的。子句是由关键字和所提供...

  • 排序检索数据

    order by 默认排序是升序,,但是可以降序使用desc select prod_name from prod...

  • 向量检索排序

    2020-07-20 如何计算特征距离 欧式距离: 两点间的真实距离,值越小,说明距离越近; 余弦距离:就是两个向...

  • 排序检索查询

    前言:上一节分享的 select 的单列,多列,通配符号查询和 DISTINCT 去重查询.这一节分享下排序检索,...

网友评论

    本文标题:检索内容排序

    本文链接:https://www.haomeiwen.com/subject/thvchxtx.html