行转列

作者: Leon1024 | 来源:发表于2019-07-24 00:40 被阅读0次

针对类似 UICollectionView当横向滚动时,显示顺序保持竖向滚动时的排序转换方法

OC


- (void)viewDidLoad {
    [super viewDidLoad];
   // 示例数组
    NSMutableArray *array = [@[] mutableCopy];
    
    for (int i = 0; i < 23; i++) {
        [array addObject:@(i)];
    }
    
    NSArray *list = [self convertSortRowToColumnWithArray:array columns:5 rows:3];
    for (NSNumber *num in list) {
        NSLog(@">>%ld", [num integerValue]);
    }
}

- (NSArray *)convertSortRowToColumnWithArray:(NSArray *)list columns:(NSInteger)column rows:(NSInteger)row {
    if (column < 2 || row < 2 || list.count < 3) {
        return list;
    }
    
    // 分页
    NSInteger count = list.count;
    NSInteger pages = count / (column * row);
    NSInteger remainder = count % (column * row);
    if (remainder) {
        pages += 1;
    }
    
    NSMutableArray *result = [@[] mutableCopy];
    NSInteger length = column * row;
    for (int i = 0; i < pages; i++) {
        
        NSInteger location = i * length;
        if (i == pages - 1) {
            length = count - location;
        }
        NSArray *segment = [list subarrayWithRange:NSMakeRange(location, length)];
        // 重排序
        segment = [self sortByColumnWithArray:segment columns:column rows:row];
        [result addObjectsFromArray:segment];
    }
    
    return [result copy];
}

- (NSArray *)sortByColumnWithArray:(NSArray *)list columns:(NSInteger)column rows:(NSInteger)row {
    NSInteger count = list.count;
    NSMutableArray *array = [@[] mutableCopy];
    
    // 先计算能排多少列
    NSInteger realColumn = count / row;
    NSInteger remainder = count % row;
    if (remainder) {
        realColumn += 1;
    }
    
    for (int i = 0; i < realColumn; i++) {
        NSMutableArray *columnArray = [NSMutableArray arrayWithCapacity:row];
        for (int j = 0; j < row; j++) {
            NSInteger index = i + j * realColumn;
            if (index < count) {
                [columnArray addObject:list[index]];
            }
        }
        [array addObjectsFromArray:columnArray];
    }
    return [array copy];
}

Swift

// 当 UICollectionView 横向分页时,item默认排序是竖向排序,此方法转化为横向排序
    static func convertSortRowToColumn(list: [Any], columns column:Int, rows row:Int) -> [Any] {
        if (column < 2 || row < 2 || list.count < 3) { return list }
        
        // 分页
        let count = list.count;
        var pages = count / (column * row)
        let remainder = count % (column * row)
        if (remainder > 0) { pages += 1 }
        
        var result: [Any] = []
        var length = column * row
        for i in 0..<pages {
            let location = i * length
            if (i == pages - 1) { length = count - location }
            var segment: [Any] = []
            for index in 0..<count {
                if index >= location && index < (location + length) {
                    segment.append(list[index])
                }
            }
            // 重排序
            segment = LENTools.sortByColumn(list: segment, columns: column, rows: row)
            result += segment
        }
        return result
    }
    
    private static func sortByColumn(list: [Any], columns column:Int, rows row:Int) -> [Any] {
        let count = list.count
        var array: [Any] = []
        
        // 先计算能排多少列
        var realColumn = count / row
        let remainder = count % row
        if (remainder > 0) { realColumn += 1 }
        
        for i in 0..<realColumn {
            var columnArray: [Any] = []
            for j in 0..<row {
                let index = i + j * realColumn;
                if (index < count) { columnArray.append(list[index]) }
            }
            array += columnArray
        }
        return array
    }

相关文章

  • SQL Server行转列

    SQL行转列 经典实例 创建表格 SQL行转列 经典实例 创建表格 行转列 结果 参考链接

  • Oracle 行转列

    行转列,以, 分隔 将行转列语句提取成一个Function

  • sql中列转行unpivot、行转列pivot详细讲解||Mys

    目录:一、sqlserver列转行、行转列详解二、Oracle列转行、行转列详解三、DB2列转行、行转列详解四、M...

  • MySQL 行转列,列传行

    静态行转列 使用case...when....then 进行行转列 使用IF() 进行行转列 (1)SUM() 是...

  • SqlServer 行转列

    1 建表,添加测试数据 表数据如下图: 行转列sql 行转列如下图: 2 建表,添加测试数据 表数据如下: 行转列...

  • 2018-06-27

    1. hive行转列的实现

  • 行转列

    MySQL建表DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_sco...

  • 行转列

    针对类似 UICollectionView当横向滚动时,显示顺序保持竖向滚动时的排序转换方法 OC Swift

  • mysql开发技巧笔记

    行转列 结果 使用 SUM 进行 行转列 列转行 应用场景 属性拆分 etl数据处理 1. 利用序列表处理列转行的...

  • sql行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL ...

网友评论

      本文标题:行转列

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