• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 获取数组上对象的索引而不重复

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:40:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我这里有两个不同的数组

    [
    "21:55",
    "21:55",
    "21:55",
    "22:00",
    "21:55"
]

我正在使用上面的两个数组来排序如下代码,

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat"HH:mm"];

        NSArray *sortedTimes = [timeArraySorting sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2)
        {
            NSDate *date1 = [dateFormatter dateFromStringbj1];
            NSDate *date2 = [dateFormatter dateFromStringbj2];
            return [date1 compare:date2];
        }];
      NSLog(@"Start sortedTimes= %@",sortedTimes);

像这样对第二个数组进行排序后,

sortedTimes =    [
        "21:55",
        "21:55",
        "21:55",
        "21:55",
        "22:00"
    ]

但我需要将第二个数组与第一个数组进行比较以获取第一个数组的索引。但在这里我得到这样的重复项,

[
    0,
    0,
    0,
    0,
    3
]

但我需要这样,

[
    0,
    1,
    2,
    4,
    3
]

你能建议我如何解决这个问题吗? 谢谢。



Best Answer-推荐答案


一种方法是向原始数组添加索引并对其进行排序,以及字符串数据...

// data from the OP
NSArray *timeArraySorting = @[
                   @"21:55",
                   @"21:55",
                   @"21:55",
                   @"22:00",
                   @"21:55"
                   ];

// add index data to it, so it has the form:
//  @[ [ @"21:55", @0], [ @"21:55", @1], ...
NSMutableArray *indexedTimeArray = [@[] mutableCopy];
for (int i=0; i<timeArraySorting.count; i++) {
    [indexedTimeArray addObject: @[timeArraySorting[i], @(i)] ];
}

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat"HH:mm"];

// sort that indexed data
NSArray *sortedTimes = [indexedTimeArray sortedArrayUsingComparator:^NSComparisonResult(NSArray *obj1, NSArray *obj2) {
    NSDate *date1 = [dateFormatter dateFromStringbj1[0]];
    NSDate *date2 = [dateFormatter dateFromStringbj2[0]];
    return [date1 compare:date2];
}];
NSLog(@"Start sortedTimes= %@",sortedTimes);

输出如下所示:

Start sortedTimes= (
    (
    "21:55",
    0
),
    (
    "21:55",
    1
),
    (
    "21:55",
    2
),
    (
    "21:55",
    4
),
    (
    "22:00",
    3
)
)

遍历该数组以获取排序结果和排序索引...

NSMutableArray *result = [@[] mutableCopy];
NSMutableArray *indexes = [@[] mutableCopy];

for (NSArray *a in sortedTimes) {
    [result addObject:a[0]];
    [indexes addObject:a[1]];
}

NSLog(@"result is %@", result);
NSLog(@"indexes is %@", indexes);

经过测试以匹配 OP 所需的结果。

关于ios - 获取数组上对象的索引而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751391/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap