gpt4 book ai didi

ios - 获取数组数组中对象的平均索引

转载 作者:行者123 更新时间:2023-11-29 02:44:39 26 4
gpt4 key购买 nike

我有一个对象数组。内部数组已按顺序排序,然后添加到整个数组中。所有内部对象都是具有不同值的同一事物。

我正在尝试遍历这些数组并从平均索引值开始按顺序组织对象。

内部数组排序的例子

obj 1  | obj 2 | obj 2
obj 2 | obj 1 | obj 1
obj 3 | obj 3 | obj 4
obj 4 | obj 4 | obj 3

那么在获得平均值之后我需要的输出将是

obj 2
obj 1
obj 3
obj 4

我真的只需要前三个指数平均值,但我想获得所有这些。所以例如要得到 3 我可以这样做

for (NSArray* innerArray in outterArray) {
for (NSString* str in innerArray) {

if ([innerArray indexOfObject:str] == 0) {

[first addObject:str];
}else if([innerArray indexOfObject:str] == 1){

[second addObject:str];

}else if ([innerArray indexOfObject:str] == 2){
[third addObject:str];

}


}
}

然后遍历这三个数组,看看会弹出什么,但必须有更好的方法来做到这一点,它可能很简单,但我看不到

最佳答案

所有对象出现的次数相同,因此您可以计算总和指数而不是每个对象的平均值。

这可以通过枚举所有内部字典并更新来完成包含当前对象索引总和的 HashMap (字典)。(请注意 indexOfObject:这里不需要定位内部数组中的对象。)

然后根据索引之和(即值)对对象进行排序字典中对象的名称):

NSArray *outerArray = @[
@[@"obj 1", @"obj 2", @"obj 3", @"obj 4"],
@[@"obj 2", @"obj 1", @"obj 3", @"obj 4"],
@[@"obj 2", @"obj 1", @"obj 4", @"obj 3"],
];

NSMutableDictionary *map = [NSMutableDictionary dictionary];
for (NSArray *innerArray in outerArray) {
NSUInteger index = 0; // Index of next object in the inner array
for (NSString *str in innerArray) {
// Add current index of this object to previous sum and update hash map
NSUInteger tmp = index + [map[str] unsignedIntegerValue];
map[str] = @(tmp);
index++;
}
}

NSArray *sorted = [[map allKeys] sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
return [map[obj1] compare:map[obj2]];
}];

NSLog(@"%@", sorted);

输出:

(
"obj 2",
"obj 1",
"obj 3",
"obj 4"
)

本例中的字典map

{
"obj 1" = 2; // "obj 1" at indices 0 + 1 + 1
"obj 2" = 1; // "obj 2" at indices 1 + 0 + 0
"obj 3" = 7; // "obj 3" at indices 2 + 2 + 3
"obj 4" = 8; // "obj 4" at indices 3 + 3 + 2
}

关于ios - 获取数组数组中对象的平均索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293713/

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