Bir C# kitaplığında kod yazarak bir (iki boyutlu) veri kümesi üzerinde clustering veriyi esas alarak veriyi gruplara veya kümelere ayırın. Yararlı olması için, kütüphanenin "genel" veya "özel" verileri alması, kümelendirmesi ve kümelenmiş verileri döndürmesi gerekir. (- Ben koordinatları ile çalışıyorum benim durumumda Lat
, Lng
olarak) Özel verileri içeri aktarma ve geri gönderme - doğru yaklaşımı arayüzler mi?
ilk düşüncem jenerik türlerini kullanmak ve iki liste, bir (yani List<T>
) jenerik verilerin listesi ve 2D vektörleri Coordinate
belirtmek için benim sınıf (yani List<Coordinate>
, belirterek aynı uzunluktaki başka geçmesine oldu listelerin birbirine indeksle karşılık geldiği bir lat, lng çifti). Ama bu oldukça sıkıcı çünkü algoritmada bu endeksleri bir şekilde takip etmem gerektiği anlamına geliyor.
Bir sonraki düşünce bir arabirim
public interface IPoint
{
double Lat { get; set; }
double Lng { get; set; }
}
tanımlayan inferfaces, kullanımı ve aletleri bu arayüzü geçmek verileri (yani, içinde geçen her bir veri olduğunu varsayalım sağlamak için bir Lat
ve Lng
).
Ama bu benim için de gerçekten çalışmıyor. C# kitaplığımı bir geçiş ağındaki kümeleri durdurmaya (farklı bir projede) kullanıyorum. Sınıf Stop
olarak adlandırılır ve bu sınıf ayrıca bir dış kütüphaneden de gelir, bu yüzden o sınıf için arayüzü uygulayamıyorum. Eğer uygulayan IPoint
arayüzünü görebileceğiniz gibi
public class ClusterableStop : GTFS.Entities.Stop, IPoint
{
public ClusterableStop(Stop stop)
{
Id = stop.Id;
Code = stop.Code;
Name = stop.Name;
Description = stop.Description;
Latitude = stop.Latitude;
Longitude = stop.Longitude;
Zone = stop.Zone;
Url = stop.Url;
LocationType = stop.LocationType;
ParentStation = stop.ParentStation;
Timezone = stop.Timezone;
WheelchairBoarding = stop.WheelchairBoarding;
}
public double Lat
{
get
{
return this.Latitude;
}
}
public double Lng
{
get
{
return this.Longitude;
}
}
}
: Sonra şöyle ClusterableStop
adında bir sınıf oluşturulması Stop
devralan edildi What did
. Şimdi ClusterableStop
için kurucuyu ClusterableStop
s veri kümesindeki tüm Stop
s dönüştürmek için kullanın, sonra algoritmayı çalıştırın ve sonucu ClusterableStop
s olarak alın.
Bu onlar düşmek neyi küme dayalı Stop
s şeyler yapmak istiyorum çünkü ne istediğini gerçekten değil. Ben yapamam ben aslında yeni durur, yani ClusterableStop
örneği çünkü s !!
Hala ne yapmak istediğimi anlayabiliyorum, ör. Orijinal nesneleri Id ile alabilirim. Ama elbette, bunu başarmanın çok daha zarif bir yolu var mı? Arayüzleri kullanmanın doğru yolu bu mu? Bu kadar basit bir fikir gibi görünüyordu - özel verileri geri almak ve geri almak - ama çok karmaşık olduğu ortaya çıktı.