Jump to page: 1 2 3
Thread overview
Dinamik Dizi Eleman Silme
Jul 12, 2012
huseyin
Jul 13, 2012
Kadir Can
Jul 13, 2012
huseyin
Jul 13, 2012
huseyin
Jul 13, 2012
Salih Dinçer
Jul 13, 2012
Salih Dinçer
Jul 13, 2012
Salih Dinçer
Jul 13, 2012
Salih Dinçer
Jul 13, 2012
huseyin
Jul 13, 2012
Salih Dinçer
Jul 13, 2012
zafer
Jul 14, 2012
huseyin
Jul 14, 2012
Salih Dinçer
Jul 14, 2012
Salih Dinçer
Jul 14, 2012
zafer
Jul 14, 2012
Salih Dinçer
Jul 14, 2012
huseyin
Jul 14, 2012
Salih Dinçer
July 13, 2012

Merhaba arkadaşlar ben kendi işim için aşağıdaki gibi ufak bir fonksiyon yazım dedim ama niyeyse beceremedim
yardım eder misiniz?

import std.stdio;
import std.array;

string[] elemansil(string[] dizi,string eleman)
{
	string[] dizi2;
	int sayac = dizi.length;
	for (int i=0;i>=sayac;++i)
	{
		if(dizi[i]==eleman)
		{
			i++;
		}
		else
		{
			dizi2[i]~=dizi[i];
		}
	}
	return dizi2;
}




void main()
{
	string[] abc;
	abc~="abc";
	abc~="ben";
	abc~= "sen";
	auto aaa=elemansil(abc,"ben");
	writeln(aaa);
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Şu haliyle çalışıyor;

import std.stdio;
import std.array;

string[] elemansil(string[] dizi,string eleman)
{
   string[] dizi2;
   int sayac = dizi.length;
   for (int i=0;i<sayac;++i)
   {
       if(dizi[i] != eleman)
       {
           dizi2~=dizi[i];
       }
   }
   return dizi2;
}

void main()
{
   string[] abc;
   abc~="abc";
   abc~="ben";
   abc~= "sen";
   auto aaa=elemansil(abc,"ben");
   writeln(aaa);
}

i>= sayac koşulu hatalı gibi geldi.i her zaman sayac'tan küçük olmalı gibi geliyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Ah evet onu görmemişim klavyede hata çok oluyor 10 parmağım iyi değil ve dikkatsiz yazıyorum teşekkürler

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

gitHub a eklendi

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Bu şekilde eleman silme hızlı olmayacaktır. Sıralı arama yerine en azından ikili arama algoritmasını (her seferinde eleman sayısını yarılayarak arayan bir kod) yapmakta fayda var. Ayrıca dizinin elemanını doğrudan std.algorithm.remove ile döndürmek ve hafızada ikinci bir dizi oluşturmadan bunu yapmak çok daha iyi olacaktır. Örneğin:

import std.algorithm, std.stdio;

string[] elemansil(string[] dizi,string eleman)
{
   for (int i=0;i<sayac;++i)
   {
       if(dizi[i] == eleman)
       {
           return dizi.remove(i);
       }
   }
   return dizi;
}

Ayrıca şurada (http://ddili.org/forum/thread/724) bağlı liste ile karşılaştırma hızı çalışması ve testi yapılmıştır. Eleman ekleme ve çıkarma gibi değişik şeyler yaptığımızı hatırlıyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Aaa evet, benim kod da ilk bulduğunu silip olduğu gibi gönderecektir...:)

Basit mantık iyidir! Karşılaştırma olması için her iki mantığı güzel bir cümle ile örneklersek:

import std.algorithm, std.stdio;

auto tekiniSil(string[] dizi, string eleman)
{
   string[] dizi2; // <---Bu kullanılmadığında tekini siler...
   for(int i = 0; i < dizi.length; i++) {
       if(dizi[i] == eleman) return dizi.remove(i);
   }
   return dizi;
}

auto hepsiniSil(string[] dizi, string eleman)
{
   string[] dizi2;
   for(int i = 0; i < dizi.length; i++) {
       if(dizi[i] != eleman) dizi2 ~= dizi[i];
   }
   return dizi2;
}

void main()
{
   auto cümle = [ "Ali,", "o", "topu", "at", "yoksa",
                  "bisiklete", "topu", "koyamazsın." ];

   foreach(s; cümle) s.write(" ");
   writeln;
   foreach(s; tekiniSil(cümle, "topu")) s.write(" ");
   writeln;
   foreach(s; hepsiniSil(cümle, "topu")) s.write(" ");
   writeln;
}/* Çıktısı:
Ali, o topu at yoksa bisiklete topu koyamazsın.
Ali, o at yoksa bisiklete topu koyamazsın.
Ali, o at yoksa bisiklete koyamazsın. koyamazsın.
*/

Bu tekrarların -------------------------------^----------------------^ neden olduğunu bilmiyorum...:(

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Sanırım std.algorithm.remove'da bir bug var!

Kullandığım derleyici sürümü: DMD 2.059

Diziyi, işleve 'ref' takısı ile uygulamadığımız halde cümle dizisine yan etkisi varmış! Bu 'remove()' işlevini kullanırken dikkatli olmakta fayda var çünkü dilim ile döndürdüğümüzde hiç bir sorun olmuyor:

   :    :    :

auto tekiniSil(string[] dizi, string eleman)
{
   string[] dizi2; // <---Bu kullanılmadığında tekini siler...
   for(int i = 0; i < dizi.length; i++) {
       if(dizi[i] == eleman) return dizi[0..i] ~ dizi[i+1..$];
   }
   return dizi;
}

   :    :    :

}/* Çıktısı:
Ali, o topu at yoksa bisiklete topu koyamazsın.
Ali, o at yoksa bisiklete topu koyamazsın.
Ali, o at yoksa bisiklete koyamazsın.
*/

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Bilgilendirme için (gerçekten) çok teşekkürler...

Bu ders arasında yeni yeni şeyler öğrendik ya şaşırıyorum; öğrenmenin sonu yok herhalde...:)

Bu arada örnek cümlelerin üçünün de farklı anlamı var ve bilinçli seçilmiş kelimeler:

1. cümle: "Ali, o topu at yoksa bisiklete topu koyamazsın."
Eğer Ali, topu elinde tutmaya (atmak fiili) devam ederse bisikletten düşmemesi için bir yere koymalı.

2. cümle: "Ali, o at yoksa bisiklete topu koyamazsın."
Eğer Ali'nin bir atı (hayvan ismi) yoksa çok kötü çünkü at kendiliğinden gider ama bisiklet gitmez...:)

3. cümle: "Ali, o at yoksa bisiklete koyamazsın."
Ali, atın yoksa çok kötü çünkü ismini vermediğim şeyi bisiklete koyamazsın ama at için böyle bir sorun yok...'hahay

(İşte bu son cümle çok zorlama oldu ama Türkçe dili çok kıvrak işte, tıpkı D gibi!)'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Hocam ben c# da bu işlemi direk gerçekleştirebiliyordum aynı eşleme tablolarındaki gibi nitelik olarak bulunuyordu ama D de remove işlemini dizilerde kullanımı konusunda bilgim yok bende kafadan birşey uydurdum :)
tahminim yanlışlar doğuracaktır

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2012

Bu bana std.algorithm.findSplit'i hatırlattı:

import std.algorithm;

string[] elemansil(string[] dizi,string eleman)
{
   auto sonuçParçalar = findSplit(dizi, [ eleman ]);
   return sonuçParçalar[0] ~ sonuçParçalar[2];
}

Arama sonucunu üç parça halinde döndürür:

'[0]: Bulunandan önceki bölüm
[1]: Bulunan
[2]: Bulunandan sonraki bölüm'

Hüseyin, bunu kullanmasan bile seninkinde de döngünün sonuna kadar ilerlemene gerek yok. Aradığının indeksini belirledikten sonra (ve eğer indeks+1 yasalsa) şu da siler:

   dizi = dizi[0 .. indeks] ~ dizi[indeks + 1 .. $];

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3