gpt4 book ai didi

objective-c - 为核心数据获取提供随机排序

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:54 24 4
gpt4 key购买 nike

我有一个带有显示项目列表的 ScrollView 的 Mac 应用程序。项目的数据由 Core Data 提供。我需要提供一个“随机播放”按钮,用于随机化 ScrollView 中项目的顺序。

最佳答案

如果您使用绑定(bind),您只有两个选择:(1),绑定(bind)到一个自定义对象,该对象具有返回排序数组的键,或者 (2) 使用随机化而不是排序的排序描述符。

在某些情况下,第二种选择更容易。要生成随机排序描述符,您可以 (1) 创建 NSSortDescriptor 子类并覆盖 compareObject:toObject:

- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2{
NSUInteger ran=(arc4random() % 3);
switch (ran) {
case 0:
return NSOrderedSame;
break;
case 1:
return NSOrderedDescending;
default:
return NSOrderedAscending;
break;
}
}

或 (2) 提供一个选择器或 block 以相同的方式提供随机排序:

  NSSortDescriptor *rs=[NSSortDescriptor sortDescriptorWithKey:@"intValue" 
ascending:YES
comparator:^(id obj1, id obj2){
NSUInteger ran=(arc4random() % 3);
switch (ran) {
case 0:
return NSOrderedSame;
break;
case 1:
return NSOrderedDescending;
default:
return NSOrderedAscending;
break;
}
}];

(2) 的缺点是您必须提供被排序的对象理解的键,例如在上面,我对 NSNumber 对象数组进行了排序,因此我必须提供一个 NSNumber 响应的键 intValue。子类方法并不真正关心键。

但是,使用排序只会返回一个弱随机化的数组,因为随机化只是一种困惑的排序,即大多数元素不会在数组中移动很远。要创建更随机的效果,请将随机排序堆叠到一个数组中,以便它们多次遍历该数组,例如:

[ aMutableArray sortUsingDescriptors:[NSArray arrayWithObjects:rs,rs,rs, nil]];

如果您使用绑定(bind),只需在您使用普通排序描述符的地方使用随机化排序描述符,您应该得到有用的随机化的东西。

关于objective-c - 为核心数据获取提供随机排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com