Merhaba arkadaşlar
Alışveriş uygulaması üzerinde takıldığım bir nokta var ödev konusu
Bir üründeki kampanya; her 2 ürün aldığında 3. ürün bedava olacak.
For Stride metodu ile listedeki 3.ürüne gelip yazıdırıyorum fakat müşteri 6 ürün aldığında diğer 3. ürünü nasıl fiyata ekleyeceğim?
Array üzerinden değer alma
10
●849
- 08-12-2017, 19:31:55
- 08-12-2017, 23:42:39Kimlik doğrulama veya yönetimden onay bekliyor.Hocam sizin yazdığınız kod Php.BoomBoom adlı üyeden alıntı: mesajı görüntüle
Ve eğer hocam siz de Swift ile bu soruyu soruyorsanız:StrongKing adlı üyeden alıntı: mesajı görüntüle
var urunler = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","8.urun","9.urun","10.urun","11.urun","12.urun"] var hediye = [String]() urunler.enumerated().forEach { (index,element) in if index % 3 == 2{ hediye.append(element) } } print(hediye)Bu kod 3. ürünü, 6.ürünü,9 .ürünü ve 12.ürünü yazdırmaktadır. Yani print işleminin yapıldığı if bloğunun içinde istediğiniz işlemi yaptırabilirsiniz.
edit: Kodu işinize yarayacak şekilde düzelttim. Hediye olan ürünler için boş bir Int / String tipinde array oluştururuz ve bu döngü içinde de her 2 + 1 inci bedava ürünümüzü bu arraye atarak hangi ürünlerin hediye / bedava olduğunu ayrı bir şekilde elde etmiş oluruz. - 09-12-2017, 02:26:44Teşekkür ederim.AlprTbk adlı üyeden alıntı: mesajı görüntüle
Benim yapmak istediğim bu array de bulunan ürün fiyatlarını tek bir değişken içine toplayıp koymak. Yani yapılan indirimleri tek değişken içine yazdırmak. Örnek vermek gerekirse;
1. ürün fiyatı 300 2. ürünün fiyatı 200
dizi de [300,300,300,200,200,200] şeklinde duruyor.
dizideki 3.yü ve 6. elemanın fiyatlarını toplayıp fiyat değişkenine atamak istiyorum. bu fiyat değişkeni başka class ta print ediliyor zaten. Yani dizide ne kadar ürün varsa ona göre fiyat değişkenin değeri değişecek.
Umarım anlatabilmişimdir.
Yardımlarınız için teşekkür ederim. - 09-12-2017, 02:36:41StrongKing adlı üyeden alıntı: mesajı görüntüle
var urunFiyatlari = [300,200,600,800,900,1500,1600,100,50] var indirim = 0 urunFiyatlari.enumerated().forEach { (index,element) in if index % 3 == 2 { indirim += element print(indirim) } }Eğer doğru anladıysam yukarıdaki yazdığım kod işinizi görecektir.
3. ürün fiyatı = 600
6. ürün fiyatı = 1500
9.ürün fiyatı = 50
çıktı = 2150 - 09-12-2017, 02:54:05Kod buAlprTbk adlı üyeden alıntı: mesajı görüntüle
element koyunca type hatası alıyorum.
/// Third item free when you buy any two deodorants (product codes 65 & 66) class BuyTwoGetThirdFreeOffer :Offer { init(){ super.init(name: "3 for 2 on Deodorants") applicableProductIds = [65,66]; } override func isApplicableTo(list: [ShoppingItem]) -> Bool { return list.reduce(false) { $0 || applicableProductIds.contains($1.productId) } } override func valueOfDiscountFrom(list: [ShoppingItem]) -> Int { //order the list by price before discounting every third item var a = applicableProducts(list: list) a = a.sorted { $0.priceInPence > $1.priceInPence } var price: Int = 0 for product in a { a.enumerated().forEach { (index,element) in if index % 3 == 2{ price += product.priceInPence } } } return price } }Testi de bu hocam
price değişkenin 219 438 538 olması gerekiyor ürün dizideki ürün sayısına göre
func testBuyTwoGetThirdFree5Items(){ addMultiple(prodId: 14, quantity: 2) //Lynx Africa 319p addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p XCTAssertEqual(receipt.discount(),219,"Buy two get third free correct with 5 items"); } func testBuyTwoGetThirdFree6ItemsCheapestFree(){ addMultiple(prodId: 15, quantity: 4) //Dove deodorant 219p addMultiple(prodId: 14, quantity: 2) //Lynx Africa 319p XCTAssertEqual(receipt.discount(),438,"Buy two get third free correct with 6 items (4/2)"); } func testBuyTwoGetThirdFree6ItemsOneOfEachPriceFree(){ addMultiple(prodId: 15, quantity: 3) //Dove deodorant 219p addMultiple(prodId: 14, quantity: 3) //Lynx Africa 319p XCTAssertEqual(receipt.discount(),538,"Buy two get third free correct with 6 items (3/3)"); - 09-12-2017, 02:59:08Kendi projenize has protocoller ve classlarınız olduğundan kodun okunması ve anlaşılması zor oluyor hocam. Ama benim tahminim arraydeki elemanların Integer olmadığı yönünde, ya da for product in a diye loop yapıp içine foreach i koymanızdan ötürü gerçekleşiyor olabilir.StrongKing adlı üyeden alıntı: mesajı görüntüle
- 09-12-2017, 03:29:38Teşekkür ederim o sorunu çözdüm.AlprTbk adlı üyeden alıntı: mesajı görüntüle
Bir sorum daha var yardımcı olursanız sevinirim.
iki dizideki ürünleri nasıl karşılaştırabiliriz. yani a dizisindeki ürünler b dizisinde varsa değer true dönecek yoksa false dönecek. - 09-12-2017, 12:37:15Öncelikle iki dizideki ürün sayısı eşit olacak mı?StrongKing adlı üyeden alıntı: mesajı görüntüle
Ve iki dizideki elemanlar eşit mi? Sırası önemli değil ama eşit olmaları önemli. Bu koşullar sağlandığında aşağıdaki yöntem çalışır.
var urunler1 = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","25.urun"] var urunler2 = ["6.urun","1.urun","5.urun","2.urun","25.urun","7.urun","3.urun","4.urun"] func diziKarsilastir(ilk ilkDizi: [String], ikinci ikinciDizi: [String]) -> Bool{ if ilkDizi.count == ikinciDizi.count && ilkDizi.sorted() == ikinciDizi.sorted(){ return true }else { return false } } print(diziKarsilastir(ilk: urunler1, ikinci: urunler2)) // Eğer iki arraydeki eleman sayıları eşit ise, ve değerler eşit ise true döndürür.Ama dizi sayıları eşit değil bir dizide 10 eleman var bir dizide 2 eleman var. Bu 2 elemanın o 10 elemanlık dizi içinde olup olmadığını kontrol etmek istiyorsak ise:
var urunler1 = ["1.urun","2.urun","3.urun","4.urun","5.urun","6.urun","7.urun","25.urun"] var urunler2 = ["5.urun","2.urun","25.urun","6.urun","18.urun"] func ayniUrunVarmi(ilk ilkDizi: [String], ikinci ikinciDizi: [String]) -> Bool{ for urun in ikinciDizi { if ilkDizi.contains(urun){ return true } } return false } print(ayniUrunVarmi(ilk: urunler1, ikinci: urunler2)) // bu fonksiyon ise ikinci dizinin elemanlarını böler, ve ilk dizi bu elemanları kapsıyor mu diye kontrol ettirir. ardından gerekli boolean değerini return eder