私はXとY値でオブジェクトのデータテーブルをソートしようとしています。これはYとXでソートされます。これですべて正常に動作しますが、 2つのY値がその許容範囲内にある場合、それらが同じとみなされ、対応するX値だけでソートされるように、許容値を追加します。 例:許容値で値をソートする
- オブジェクト1は
X=4 and Y=4.1
です。 - オブジェクト2は
X=6 and Y=4
です。
0.1差が所定の許容値内であれば、1と2の順に並べ替えるようにしますが、この違いによって2と1の順に並べ替えます。 これはRevit APIプロジェクトの一部ですが、これは一般的なC#の質問にすぎません。テーブルはobjectList
と呼ばれるオブジェクトのリストからデータを取得します。 私が欲しいものを達成する方法はありますか?
コード:
// Create table
DataTable obTable = new DataTable();
// id
DataColumn idColumn = new DataColumn();
idColumn.DataType = Type.GetType("System.Int32");
idColumn.ColumnName = "id";
obTable.Columns.Add(idColumn);
// X
DataColumn xColumn = new DataColumn();
xColumn.DataType = Type.GetType("System.Int32");
xColumn.ColumnName = "X";
obTable.Columns.Add(xColumn);
// Y
DataColumn yColumn = new DataColumn();
yColumn.DataType = Type.GetType("System.Int32");
yColumn.ColumnName = "Y";
obTable.Columns.Add(yColumn);
// get data from objectList
foreach (FamilyInstance ob in objectList)
{
int id = ob.Id.IntegerValue;
LocationPoint L = ob.Location as LocationPoint;
int X = (int)L.Point.X;
int Y = (int)L.Point.Y;
DataRow row;
row = obTable.NewRow();
row["id"] = id;
row["X"] = X;
row["Y"] = Y;
obTable.Rows.Add(row);
}
// sort table
DataView dv = new DataView(obTable);
dv.Sort = "Y ASC, X ASC";
DataTable dt = dv.ToTable();
@HimBromBeereありがとうXD –
あなたがたDataTableに挿入する前に、あなたはobjectListを並べ替えることができます。これは、比較(T)デリゲートを実装することによって行うことができます。詳細はこちらをご覧ください:https://msdn.microsoft.com/en-us/library/tfakywbh(v=vs.110).aspx – lamandy
@lamandyしかし、2つの値でリストをソートできますか? Yの値が同じ場合(または指定された許容値内であれば)、Yでソートし、次にXでソートします。それが私が正直であるためにデータテーブルを使用している唯一の目的です。 –