iphone - 如何在Objective-C中一个数字中的部分较少的版本号上使用比较?
<p><p>我在 <a href="http://snipplr.com/view/2771" rel="noreferrer noopener nofollow">http://snipplr.com/view/2771</a> 找到了以下代码</p>
<p>这非常好,几乎正是我想要的,但是如果我使用值 <code>@"1.4.5", @"10.4"</code> 它会产生错误的结果,说第一个数字较低。</p>
<p><strong>Arghhhh 深夜编码,抱歉,我将 10.4 读作 1.4 :(</strong></p>
<p>我不确定为什么 compare 有问题,问题是什么?</p>
<pre><code>/*
* compareVersions(@"10.4", @"10.3"); //
returns NSOrderedDescending (1) - aka first number is higher
* compareVersions(@"10.5", @"10.5.0"); //
returns NSOrderedSame (0)
* compareVersions(@"10.4 Build 8L127", @"10.4 Build 8P135"); //
returns NSOrderedAscending (-1) - aka first number is lower
*/
NSComparisonResult compareVersions(NSString* leftVersion, NSString* rightVersion)
{
int i;
// Break version into fields (separated by '.')
NSMutableArray *leftFields= [ initWithArray:];
NSMutableArray *rightFields = [ initWithArray:];
// Implict ".0" in case version doesn't have the same number of '.'
if ( < ) {
while ( != ) {
;
}
} else if ( > ) {
while ( != ) {
;
}
}
</code></pre>
<p>.</p>
<pre><code> // Do a numeric comparison on each field
for(i = 0; i < ; i++) {
NSComparisonResult result = [ compare: options:NSNumericSearch];
if (result != NSOrderedSame) {
;
;
return result;
}
}
;
;
return NSOrderedSame;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>[我今天早些时候发布了这个,但它没有被选为答案,它可能更适合你的问题。还有其他技巧,可以看<a href="https://stackoverflow.com/q/3339722/1633251" rel="noreferrer noopener nofollow">here</a>和 <a href="https://stackoverflow.com/q/12300794/1633251" rel="noreferrer noopener nofollow">here</a>其他解决方案。]</p>
<p>我所做的就是将该字符串分解为组件:</p>
<pre><code>NSArray *array = ;
NSInteger value = 0;
NSInteger multiplier = 1000000;
for(NSString *n in array) {
value += * multiplier;
multiplier /= 100;
}
</code></pre>
<p>它的作用是为您提供一个可用于比较的标准化值,并且通常会比较具有不同“深度”的版本,即 1.5 和 1.5.2。 </p>
<p>如果您有超过 100 个点发布(即任何数字大于 100),它就会中断,并且还会声明 1.5.0 == 1.5。也就是说,它简短、甜美且易于使用。</p>
<p>编辑:如果您使用 NSString 'compare:options:' 方法,请确保您的字符串修饰得很好:</p>
<pre><code> s1 = @"1.";
s2 = @"1";
NSLog(@"Compare %@ to %@ result %d", s1, s2, (int));
s1 = @"20.20.0";
s2 = @"20.20";
NSLog(@"Compare %@ to %@ result %d", s1, s2, (int));
2012-09-06 11:26:24.793 xxx Compare 1. to 1 result 1
2012-09-06 11:26:24.794 xxx Compare 20.20.0 to 20.20 result 1
</code></pre></p>
<p style="font-size: 20px;">关于iphone - 如何在Objective-C中一个数字中的部分较少的版本号上使用比较?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12308659/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12308659/
</a>
</p>
页:
[1]