假设我有两个像这样的NSMutableString:String 1 ----- {aaa,bss,cdd,dff,eee,fgh}String 2 ----- {aaa,bss,cdd}我们如何在NSArray中找到String 1和String 2之间的差异:像这样:- { dff,eee,fgh }正如重复问题中提到的,这是不同的。
NSMutableString
String
NSArray
5sxhfpxr1#
将这两个字符串放在两个不同的NSMutableSet中,然后从1st中减去2nd。你会得到你的结果。
NSString* str1 = @"aaa,bss,cdd,dff,eee,fgh"; NSString* str2 = @"aaa,bss,cdd"; NSMutableSet *set1 = [NSMutableSet setWithArray:[str1 componentsSeparatedByString:@","]]; NSMutableSet *set2 = [NSMutableSet setWithArray:[str2 componentsSeparatedByString:@","]]; [set1 minusSet:set2]; NSLog(@"result %@",[set1 allObjects]);
xmjla07d2#
尝试使用NSMutableArray删除相同的对象。对于例如
NSMutableArray
NSString *s1 = @"aaa,bss,cdd,dff,eee,fgh"; NSString *s2 = @"aaa,bss,cdd"; NSArray *arr1 = [s1 componentsSeparatedByString:@","]; NSArray *arr2 = [s2 componentsSeparatedByString:@","]; NSMutableArray *resArray = [NSMutableArray arrayWithArray:arr1]; [resArray removeObjectsInArray:arr2]; NSString *res = [resArray componentsJoinedByString:@","]; NSLog(@"Result :: %@", res);
dgtucam13#
问题的第一部分是将每个字符串分隔成由逗号分隔的子字符串。创建可使用的子字符串[string substringFromIndex:index]-从该索引向前获取NSString [string substringToIndex:index]-从开始到该索引获取NSString或者您可以将其组合到[string substringWithRange:NSMakeRange(fisrtIndex, secondIndex)]-从第一个索引到第二个索引获取字符串这些是基本操作。但在这种情况下,您可以具体使用更多:[string componentsSeparatedByString:@","]获取一个包含所有子字符串的NSArray。这将导致'{'和'}'出现在第一个和最后一个组件中的问题。这可以通过多种方式解决:
[string substringFromIndex:index]
[string substringToIndex:index]
[string substringWithRange:NSMakeRange(fisrtIndex, secondIndex)]
[string componentsSeparatedByString:@","]
'{'
'}'
[string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@",{"]]这个方法的问题是,因为你的字符串以其中一个分隔符开始/结束,你会得到第一个/最后一个组件一个空字符串。你可以从数组中删除它,或者忽略它,或者选择其他方法,你自己选择。现在你知道了如何得到子串,你所需要知道的就是如何比较这两者。有很多方法可以做到这一点。我只列举几个例子。当然,每种解决方案都有自己的优点和缺点以及代码复杂性。1 -使用isEqualToString:逐个比较每个子串2 -通过使用[string2 rangeOfString:substring].location != NSNotFound将来自原始串之一的每个子串与完整的第二原始串进行比较3 -如果你有iOS 8或OS X约塞米蒂,你可以使用[string2 containsString:substring]4 -你可以将子字符串的数组转换成集合,然后按照Ankit Srivastava的建议进行比较5 -您可以使用removeObjectsInArray来获取两者之间不常见的子字符串,然后使用新创建的数组将removeObjectsInArray转换为原始字符串,并仅具有公共字符串。真的,可能性几乎是无穷无尽的
[string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@",{"]]
isEqualToString:
[string2 rangeOfString:substring].location != NSNotFound
[string2 containsString:substring]
removeObjectsInArray
3条答案
按热度按时间5sxhfpxr1#
将这两个字符串放在两个不同的NSMutableSet中,然后从1st中减去2nd。你会得到你的结果。
xmjla07d2#
尝试使用
NSMutableArray
删除相同的对象。对于例如
dgtucam13#
问题的第一部分是将每个字符串分隔成由逗号分隔的子字符串。
创建可使用的子字符串
[string substringFromIndex:index]
-从该索引向前获取NSString[string substringToIndex:index]
-从开始到该索引获取NSString或者您可以将其组合到[string substringWithRange:NSMakeRange(fisrtIndex, secondIndex)]
-从第一个索引到第二个索引获取字符串这些是基本操作。但在这种情况下,您可以具体使用更多:
[string componentsSeparatedByString:@","]
获取一个包含所有子字符串的NSArray。这将导致'{'
和'}'
出现在第一个和最后一个组件中的问题。这可以通过多种方式解决:[string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@",{"]]
这个方法的问题是,因为你的字符串以其中一个分隔符开始/结束,你会得到第一个/最后一个组件一个空字符串。你可以从数组中删除它,或者忽略它,或者选择其他方法,你自己选择。现在你知道了如何得到子串,你所需要知道的就是如何比较这两者。有很多方法可以做到这一点。我只列举几个例子。当然,每种解决方案都有自己的优点和缺点以及代码复杂性。
1 -使用
isEqualToString:
逐个比较每个子串2 -通过使用
[string2 rangeOfString:substring].location != NSNotFound
将来自原始串之一的每个子串与完整的第二原始串进行比较3 -如果你有iOS 8或OS X约塞米蒂,你可以使用
[string2 containsString:substring]
4 -你可以将子字符串的数组转换成集合,然后按照Ankit Srivastava的建议进行比较
5 -您可以使用
removeObjectsInArray
来获取两者之间不常见的子字符串,然后使用新创建的数组将removeObjectsInArray
转换为原始字符串,并仅具有公共字符串。真的,可能性几乎是无穷无尽的