July 02, 2018

Şu kod çok hoşuma gitti paylaşmak istedim.

nameList dizisinde olmayıp socketDataList veya socketOrderBookHelperMap adındaki anahtarı dizge olan iki "associative" listeden çıkarmam gerekiyordu. İlk defa setDifference ve merge kullanmak kısmet oldu paylaşmak istedim .

	void CloseNotIntersecting( string[] nameList, string txName)
	{
		import std.algorithm : setDifference, merge, uniq, each;

		auto combinationRange = socketDataList.keys.merge( socketOrderBookHelperMap.keys).uniq;
		combinationRange.setDifference( nameList ).each!( a => CloseSockets(a, txName) );
	}

	DList!Json[string] socketDataList;
	OrderBookSocketHelper[string] socketOrderBookHelperMap;

Birde soru sorayım. Acaba merge fonksiyonun otomatik "uniq" yapma özelliği varmıdır bir şekilde. Uniq 'i çağırmadan yapabilirmiydim?

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

July 02, 2018

Evet, işler yolunda gidince çok güzel oluyor. :)

Hayır, merge çift olanları çıkartmıyormuş: "Duplicates are not eliminated"

https://dlang.org/phobos/std_algorithm_sorting.html#.merge

Ancak, merge elemanların sıralı olduklarını varsayıyormuş ama '.keys' belirsiz sırada verir. Bence burada 'in' işleciyle "şu tabloda varsa veya yoksa" diye açıkça aramak daha hızlı sonuç verecektir: toplam '(M + N)' işlem.

Ali

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