按对象包装的数组维度排序对象列表

时间:2017-11-05 10:40:15

标签: c#

按特定维度对数组列表进行排序很简单:

var test = new List<float[]>
{
    new[] {0.0f, 0.0f},
    new[] {0.0f, 0.25f}, 
    new[] {0.25f, 0.25f}, 
    new[] {1f, 1f}, 
    new[] {0.25f, 0.75f}, 
    new[] {1f, 1f}, 
    new[] {0.0f, 0.0f},
};

test = test
    .OrderBy(arr => arr[1])
    .ToList();

我遇到这些数组包装在对象/类中的情况:

public class TestClass
{
    public TestClass(float[] array)
    {
        SomeArray = array;
    }
    public float[] SomeArray { get; set; }
}

我想对这些对象的列表进行排序:

var X = new List<TestClass>
{
    new TestClass(new[] {0.0f, 0.0f}),
    new TestClass(new[] {0.0f, 0.25f}),
    new TestClass(new[] {0.25f, 0.25f}),
    new TestClass(new[] {1f, 1f}),
    new TestClass(new[] {0.25f, 0.75f}),
    new TestClass(new[] {1f, 1f}),
    new TestClass(new[] {0.0f, 0.0f}),
};

按给定维度(例如,在此方案中为0或1)。请注意,我已经将TestClass的CompareTo用于其他目的。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

显而易见的方法是查看对象:

var dim = 0;

var sorted = (from x in X
              orderby x.SomeArray[dim]
              select x
             ).ToList();

(使用各种比较/相等接口之一的实现不能提供参数化排序的能力。)

答案 1 :(得分:0)

X = X
    .OrderBy(i => i.SomeArray[1])
    .ToList();