美文网首页iOS开发-高级汇总征服iOSiOS程序猿
NSArray相邻且相等元素进行分块形成新的数组

NSArray相邻且相等元素进行分块形成新的数组

作者: 曲终叶落 | 来源:发表于2017-08-13 02:02 被阅读28次

效果图:

image

定义一个数组

NSArray *array = @[@"3",@"3",@"3",@"10",@"15",@"15",@"15",@"10",@"10",@"3",@"30",@"30",@"3",@"25",@"25"];

关键方法

- (void)elementBlockWithArray:(NSArray *)array{

    NSString *temp;

    NSInteger index = 0;

    NSMutableArray *dictArray = [NSMutableArray array];

    int i;

    for (i = 0; i < array.count ;i++) {

        if (![temp isEqualToString:array[i]]) {

            temp = array[i];

            NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:temp,@"value",@0,@"length",nil];

            if (dictArray.count > 0) {
                [dictArray.lastObject setObject:@(i - index) forKey:@"length"];
            }

            [dictArray addObject:dict];
            index = i;
        }
    }

    [dictArray.lastObject setObject:@(array.count - index) forKey:@"length"];

}

根据字典数组创建Label

- (void)creatLabelWithDictArray:(NSArray *)dictArray{

    CGFloat onceWidth = 25.0;

    CGFloat x = 0;

    CGFloat y = 50.0;

    CGFloat height= 60.0;

    // 间隙
    CGFloat gap = 2.0;

    for (int i = 0; i < dictArray.count; i++) {

        NSMutableDictionary *dict = dictArray[i];

        NSInteger length = [dict[@"length"] integerValue];
        NSString *value = dict[@"value"];

        if (i > 0) {
            NSMutableDictionary  *preDict = dictArray[i - 1];
            NSInteger preLength = [preDict[@"length"] integerValue];
            x = x + preLength * onceWidth;
        }

        UILabel *lb = [[UILabel alloc] initWithFrame:(CGRectMake(x+gap/2, y, onceWidth * length - gap, height))];
        lb.numberOfLines = 2;
        lb.textAlignment = NSTextAlignmentCenter;
        lb.text = [NSString stringWithFormat:@"%@\n%@个",value,dict[@"length"]];
        lb.textColor = [UIColor whiteColor];
        lb.font = [UIFont systemFontOfSize:14];
        if (length == 1) {
            lb.backgroundColor = [UIColor cyanColor];
        }else if (length == 2) {
            lb.backgroundColor = [UIColor redColor];
        }else{
            lb.backgroundColor = [UIColor greenColor];
        }

        [self.view addSubview:lb];

    }
}

GitHub:https://github.com/quzhongyeluo/ArrayElementBlock

相关文章

  • NSArray相邻且相等元素进行分块形成新的数组

    效果图: 定义一个数组 关键方法 根据字典数组创建Label GitHub:https://github.com/...

  • 算法:摆动排序 I & II

    摆动排序 I 给你一个没有排序的数组,请将原数组就地重新排列满足如下性质 允许相邻元素相等 思路 先对数组进行排序...

  • lintCode-facebook

    //给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行...

  • js实现数组去重

    定义一个新数组,判断旧数组中的元素是否在新数组中已存在 对数组进行排序后,比较前后两个相邻元素 根据对象的属性不重...

  • 颜色排序

    描述 给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进...

  • 数组去重

    方法一(通过indexOf,返回该数组下表) 方法二(通过sort从小到大排序,然后遍历数组比较相邻元素是否相等)...

  • 选择排序和冒泡排序

    规则:比较大小,位置交换 选择排序:数组中的每个元素都进行比较 冒泡排序:数组中相邻元素进行比较 选择排序 for...

  • OC中的可变数组和不可变数组的常用方法

    <1>数组的常用方法<2>不可变数组:<11>按照给定的数组元素进行拼接后放入字符串NSArray *array2...

  • Array.prototype.filter

    1.filter 1.1作用 用于对数组进行过滤 会创建一个新数组,且新数组中的元素是通过检测指定数组中符合条件的...

  • JS数组去重

    借助新数组 通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等则添加到新数组中 var arr =...

网友评论

    本文标题:NSArray相邻且相等元素进行分块形成新的数组

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