Сокращение повторяющегося кода с помощью переключателя - PullRequest
0 голосов
/ 26 марта 2019

Есть ли способ преобразовать этот код в 5 строк, он кажется довольно повторяющимся.

Я хочу использовать корпус переключателя. Кроме того, я хотел бы сохранить его на начальном уровне.

void SortProductList(Product *productList, int size, char sortOption){
    Product temp;

    for (int i=0; i<size-1; i++)
    {
        for (int j=i+1; j<size; j++)
        {
            if (sortOption == 'p') //sorting by price
            {
                if (productList[j].productPrice<productList[i].productPrice) //second is bigger than first
                {
                    temp = productList[i];
                    productList[i] = productList[j];
                    productList[j]=temp;
                }
            }
            if (sortOption == 'w') //sorting by weight
            {
                if (productList[j].productWeight<productList[i].productWeight) //second is bigger than first
                {
                    temp = productList[i];
                    productList[i] = productList[j];
                    productList[j]=temp;
                }
            }
            if (sortOption == 'n') //sorting by weight
            {
                if (strcmp(productList[j].productName,productList[i].productName)<0) //second is bigger than first
                {
                    temp = productList[i];
                    productList[i] = productList[j];
                    productList[j]=temp;
                }
            }
        }
    }
}

1 Ответ

3 голосов
/ 26 марта 2019

Операторы Switch, кажется, не продвигают вас намного дальше, чем вы уже есть, попробуйте это:

for (int i = 0; i < size - 1; i++){
        for (int j = i + 1; j < size; j++){
            if ((sortOption == 'p' && productList[j].productPrice < productList[i].productPrice) ||
                (sortOption == 'w' && productList[j].productWeight < productList[i].productWeight) ||
                (sortOption == 'n' && (strcmp(productList[j].productName, productList[i].productName) < 0))){
                     temp = productList[i];
                     productList[i] = productList[j];
                     productList[j] = temp;
            }
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...