MST

星途 面试题库

面试题:Objective-C中KVC集合操作与复杂业务逻辑结合

在一个复杂的电商应用场景中,有订单类Order,订单包含多个订单项OrderItem,订单项有商品价格price和商品数量quantity属性。同时订单还有一个客户属性customer,客户有等级属性level。现在要求通过KVC集合操作,按照客户等级分别计算出不同等级客户订单的总金额(订单项价格 * 数量的总和),并以字典形式返回,字典的键为客户等级,值为对应等级客户订单总金额。请详细描述实现思路并给出代码实现。
36.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 遍历所有订单,获取每个订单的客户等级和订单金额(订单金额通过遍历订单中的订单项,将每个订单项的价格乘以数量并累加得到)。
  2. 使用字典来存储不同等级客户的订单总金额,键为客户等级,值为对应等级客户订单总金额。在遍历订单过程中,若字典中已存在该客户等级的键,则将当前订单金额累加到对应的值上;若不存在,则在字典中新增该键值对。
  3. 最终返回存储不同等级客户订单总金额的字典。

代码实现(假设使用Objective - C语言)

#import <Foundation/Foundation.h>

@interface OrderItem : NSObject
@property (nonatomic, assign) double price;
@property (nonatomic, assign) NSInteger quantity;
@end

@implementation OrderItem
@end

@interface Customer : NSObject
@property (nonatomic, assign) NSInteger level;
@end

@implementation Customer
@end

@interface Order : NSObject
@property (nonatomic, strong) Customer *customer;
@property (nonatomic, strong) NSArray<OrderItem *> *orderItems;
@end

@implementation Order
@end

NSDictionary<NSNumber *, NSNumber *> *calculateTotalAmountByCustomerLevel(NSArray<Order *> *orders) {
    NSMutableDictionary<NSNumber *, NSNumber *> *totalAmountByLevel = [NSMutableDictionary dictionary];
    for (Order *order in orders) {
        NSNumber *level = @(order.customer.level);
        double orderTotal = 0;
        for (OrderItem *item in order.orderItems) {
            orderTotal += item.price * item.quantity;
        }
        if (totalAmountByLevel[level]) {
            double currentTotal = [totalAmountByLevel[level] doubleValue];
            totalAmountByLevel[level] = @(currentTotal + orderTotal);
        } else {
            totalAmountByLevel[level] = @(orderTotal);
        }
    }
    return totalAmountByLevel;
}

你可以使用如下方式调用:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建一些示例数据
        OrderItem *item1 = [[OrderItem alloc] init];
        item1.price = 10;
        item1.quantity = 2;
        
        OrderItem *item2 = [[OrderItem alloc] init];
        item2.price = 20;
        item2.quantity = 3;
        
        Customer *customer1 = [[Customer alloc] init];
        customer1.level = 1;
        
        Order *order1 = [[Order alloc] init];
        order1.customer = customer1;
        order1.orderItems = @[item1, item2];
        
        OrderItem *item3 = [[OrderItem alloc] init];
        item3.price = 15;
        item3.quantity = 4;
        
        Customer *customer2 = [[Customer alloc] init];
        customer2.level = 2;
        
        Order *order2 = [[Order alloc] init];
        order2.customer = customer2;
        order2.orderItems = @[item3];
        
        NSArray<Order *> *orders = @[order1, order2];
        
        NSDictionary<NSNumber *, NSNumber *> *result = calculateTotalAmountByCustomerLevel(orders);
        NSLog(@"%@", result);
    }
    return 0;
}

代码实现(假设使用Swift语言)

class OrderItem {
    var price: Double
    var quantity: Int
    
    init(price: Double, quantity: Int) {
        self.price = price
        self.quantity = quantity
    }
}

class Customer {
    var level: Int
    
    init(level: Int) {
        self.level = level
    }
}

class Order {
    var customer: Customer
    var orderItems: [OrderItem]
    
    init(customer: Customer, orderItems: [OrderItem]) {
        self.customer = customer
        self.orderItems = orderItems
    }
}

func calculateTotalAmountByCustomerLevel(orders: [Order]) -> [Int: Double] {
    var totalAmountByLevel: [Int: Double] = [:]
    for order in orders {
        let level = order.customer.level
        let orderTotal = order.orderItems.reduce(0) { $0 + ($1.price * Double($1.quantity)) }
        if var currentTotal = totalAmountByLevel[level] {
            currentTotal += orderTotal
            totalAmountByLevel[level] = currentTotal
        } else {
            totalAmountByLevel[level] = orderTotal
        }
    }
    return totalAmountByLevel
}

你可以使用如下方式调用:

let item1 = OrderItem(price: 10, quantity: 2)
let item2 = OrderItem(price: 20, quantity: 3)

let customer1 = Customer(level: 1)
let order1 = Order(customer: customer1, orderItems: [item1, item2])

let item3 = OrderItem(price: 15, quantity: 4)
let customer2 = Customer(level: 2)
let order2 = Order(customer: customer2, orderItems: [item3])

let orders = [order1, order2]
let result = calculateTotalAmountByCustomerLevel(orders: orders)
print(result)

以上代码分别用Objective - C和Swift实现了按照客户等级计算不同等级客户订单总金额的功能,由于题目强调KVC集合操作,但实际本题核心逻辑通过常规遍历即可完成,未过度依赖KVC集合操作特性。如果有对KVC集合操作的具体需求,请进一步明确。