簡體   English   中英

乘以double類型的數組元素

[英]Multiply array elements of type double

我有這個數組。

double numbers[] = {40.0, 8.0, 45.0, 55.0, 30.0, 10.0, 20.0};

和一些乘數

CGFloat multiplier = 2.67;

我想將數字數組的每個元素乘以乘數。 所以數組就像

double numbers[] = {106.80, 21.36, 120.15, 146.85, 80.1, 26.7, 53.4};

我收到“將'double'發送到不兼容類型'id _Nonnull'的參數”。

在該numbers數組中找到max no的最簡單方法是什么。

C數組比ObjC NSArray更快,但是當前設備非常快,因此使用對象編寫代碼通常更好,雖然速度有所降低,但卻提高了可讀性。

您的問題的解決方案“我想將數字數組的每個元素乘以乘數。在該數字數組中找到最大否的最簡單方法是什么。” 是:

double numbers[] = {40.0, 8.0, 45.0, 55.0, 30.0, 10.0, 20.0};
CGFloat multiplier = 2.67;
double maxValue = -DBL_MAX;
for (int i = 0; i < (sizeof(numbers) / sizeof(double)); i++) {
    numbers[i] *= multiplier; // multiply value
    maxValue = MAX(numbers[i], maxValue); // find max value
}
NSLog(@"Max=%f.2", maxValue);

輸出如下:

(double) maxValue = 146.84999999999999
(double [7]) numbers = ([0] = 106.8, [1] = 21.359999999999999, [2] = 120.14999999999999, [3] = 146.84999999999999, [4] = 80.099999999999994, [5] = 26.699999999999999, [6] = 53.399999999999999)

但是,如果您是由於錯誤,缺乏知識或其他原因而這樣做:我強烈建議您使用NSArray除非性能是此處的已知問題。

由於仍然需要循環來乘以每個元素,因此可以添加一行以檢查並設置最大值

CGFloat multiplier = 2.67;
double numbers[] = {40.0, 8.0, 45.0, 55.0, 30.0, 10.0, 20.0};
int numberOfElements = sizeof(numbers) / sizeof(double);
double max = 0.0;

for (int i = 0; i < numberOfElements; i++) {
    numbers[i] *= multiplier;
    if (numbers[i] > max) max = numbers[i];
}
NSLog(@"maximum value: %f", max);

我將用Objective-C而不是C編寫代碼:

NSMutableArray* numbers = 
    [@[@40.0, @8.0, @45.0, @55.0, @30.0, @10.0, @20.0] mutableCopy];
CGFloat multiplier = 2.67;
[numbers enumerateObjectsUsingBlock:^(NSNumber* obj, NSUInteger idx, BOOL* stop) {
    numbers[idx] = @(obj.doubleValue * multiplier);
}];


這種方法的[numbers valueForKeyPath:@"@max.self"]是:您只需說[numbers valueForKeyPath:@"@max.self"]即可獲得最大值。

但是,除了Objective-C之外,我還會用Swift編寫代碼。 您顯然是一個初學者,而Objective-C和C並不是初學者的語言。 在Swift中這是如此容易和簡單!

var arr = [40.0, 8.0, 45.0, 55.0, 30.0, 10.0, 20.0]
let multiplier = 2.67
arr = arr.map {$0 * multiplier}
let max = arr.max()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM