【问题标题】:Sorting an NSArray of Objects by Letter then number [duplicate]按字母排序对象的NSArray然后编号[重复]
【发布时间】:2015-12-31 11:47:00
【问题描述】:

我有一个“房间”对象数组,每个对象都有一个名为“room.descritpion”的属性,它是一个包含字母数字字符的 NSString。这些房间需要使用“room.description”属性按字母升序排列,然后按数字升序排列。我可以轻松完成字母排序,但我正在努力如何合并第二个排序,该排序将基于字母后面的数字,例如L21 L19 A34 A12 应在数组中按 A12、A34、L19、L21 等顺序排列。搜索的优先级应该是首先是字母,然后是数字,因此只有数字的房间位于数组的末尾。字母和数字并不总是相同的顺序,即字母并不总是在第一位。我已经彻底阅读了文档,但似乎找不到解决方法。如果它使过程更容易,我很乐意使用块。任何帮助将不胜感激。

【问题讨论】:

标签: ios swift sorting nsarray alphanumeric


【解决方案1】:
NSArray *unorderedTitles = [NSArray arrayWithObjects:@"L21",@"L19",@"A34",@"A12",@"A1", nil];
NSArray *orderedTitles = [unorderedTitles sortedArrayUsingSelector:@selector(localizedStandardCompare:)];

NSLog(@"orderedTitles %@",orderedTitles);

Duplicated

【讨论】:

  • 试一试,但它产生了一个异常 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[RoomslocalizedStandardCompare:]:无法识别的选择器发送到实例 0x79fc8310”我猜这是因为 Array 中的对象是房间对象,具有描述它们是什么的字符串属性。我不能直接通过字符串组织。有没有办法使用这种方法引用 room.description 属性,而不是我认为这里发生的房间对象。
  • 投反对票的人应该给出一个理由。这将帮助我了解我做错的事情。欢迎任何批评。
【解决方案2】:

这个

var arr = ["A6", "A2", "3", "B4", "L8", "4", "B7"]
let sortedArr = arr.sort({String($0) < String($1)})
print(sortedArr)

会打印出来

["3", "4", "A2", "A6", "B4", "B7", "L8"]

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2017-06-11
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多