Thread overview
Bir Dizgeyi Bölmek (Split String)
Jun 12, 2021
Salih Dincer
Jun 12, 2021
Ali Çehreli
Apr 11, 2022
Salih Dincer
June 12, 2021

Merhaba,

Aslında D'de bu konuda çok olanak var. Burada hangisi iyi diye tartışabiliriz. Benim bulabildiğim 2 olanak var ve ilki std.array'deki split:

import std.array;
  int counter;
  foreach(n; str.split!isWhite)
  {
   //if(n.length > 0)/*
   if(!n.empty)//*/
    {
      n.writeln; //* 11 nonblank /
    } else {
      counter++;
    }
  }
  counter.writeln; //* 8 blank /

Yapmak istediğim, tüm görünmez karakterleri filitrelemek; buna boşluklar dahil. Ama yukarda görüleceği üzere (döndürülen bir dizge dizisi: string[]) dizide boş elemanlar da (bu aşağıda vereceğim örnekte 8), dolu olan istediklerim de var. İstersem, yukardaki gibi yeni bir döngüye sokarak 2 şekilde (1. if'in solundaki işaretleri kaldırıp geçiş yapın: toggle) filitreleyebilirim ama esnek olması yanında daha yavaş olur sanki...

Ne dersiniz şağıdaki daha iyi olabilir mi?

import std.algorithm;
import std.uni : isWhite;
import std.stdio;

void main()
{
  auto str = "\tBir Madde: \n"~
  "Buraya uzun bir ara       "~
  "ve belki biraz daha yazmak";

  str.splitter!isWhite.
  filter!(a => a != "").writeln;
}
June 12, 2021
On 6/12/21 12:51 AM, Salih Dincer wrote:

> import std.array;
>    int counter;
>    foreach(n; str.split!isWhite)

Galiba std.array.split "heveslidir". Duruma göre algorithm.splitter'dan daha uygun ama daha yavaş olabilir.

>    str.splitter!isWhite.
>    filter!(a => a != "").writeln;

Ben hemen hemen her zaman splitter'ı kullanıyorum. Son zamanlarda std.functional'daki 'not'tan da yararlandığım oldu:

  str.splitter!isWhite.
  filter!(not!empty).writeln;

Ali


April 11, 2022

Geçen sene bu konu yine gündeme gelmiş ve 1 sene dolmadan şu yardımcı SliceString v2 ortaya çıktı...

Olur da buraya denk gelen aşağıdaki başlığa da baksın çünkü walkLength gibi olanaklarla optimize edildi ve dilim döndürülmesiyle ilginç hava oluşturdu. Sanırım daha da geliştirişebilir, elementPos'a alternatif ne olabilir diye bakmak lazım:

https://forum.dlang.org/post/pxkhngxmqgiwwymmgoyh@forum.dlang.org