按字母顺序对动态下拉列表排序

时间:2017-06-08 16:31:53

标签: c# sorting xamarin xamarin.ios

每个项目都有一个水平三个字符串的下拉列表。如何按字母顺序按字母顺序从每个项目中按字符串1排序,然后按每个项目的字符串2排序?

这是我的片段:

foreach (var item in list)
{
    if(typeof(T).Equals(typeof(Machine)))
    {
        Machine machine = (item as Machine);
        string title = machine.MachineName + " - " + machine.Serial + " - " + machine.MachineOwnership;
        alert.AddAction(UIAlertAction.Create(title, UIAlertActionStyle.Default, action => {
            button.SetTitle(title, UIControlState.Normal);
        }));
    }
    else if(typeof(T).Equals(typeof(Person)))
    {
        alert.AddAction(UIAlertAction.Create((item as Person).Name, UIAlertActionStyle.Default, action => {
            button.SetTitle((item as Person).Name, UIControlState.Normal);
        }));
    }
}

list包含Machine类型具有以下属性的对象:

MachineNameSerialMachineOwnshership(所有字符串)。

因此,当我首先检查列表类型是什么,然后填写每个项目的下拉列表时,我想做OrderBy(MachineName).ThenBy(Serial)但不确定如何正确执行此操作。

如果有人需要澄清,我的下拉列表看起来像这样:

-------------------------------------------------
MachineNameStartsWithA - 01234 - OwnerStartsWithA
--------------------------------------------------
MachineNameStartsWithB - 012345 - OwnerStartsWithB
---------------------------------------------------

等......它是一长串的项目,其中字符串被" - "喜欢它在代码中的显示。

另外,对于它的价值,这是目前在Xamarin应用程序中。

1 个答案:

答案 0 :(得分:4)

我认为这样的事情应该有效。按Tuple排序应该是词典:

list.OfType<Machine>().OrderBy(x => new Tuple<string,string>(x.MachineName,x.Serial))

OfType调用还应删除typeof检查和转换的必要性 - 结果应该是Machine s的可迭代。

根据有关多种对象类型的评论:

将类似的类型组合在一起

除非将MachinePerson组合在一起,否则从UI / UX角度来看这将是我的默认首选项。根据{{​​1}}的长度,最好先拆分元素类型,因为list每次都会枚举整个列表。

list.OfType

交错各种类型

foreach(var item in list.OfType<Machine>().OrderBy(x => new Tuple<string,string>(x.MachineName,x.Serial)))
{
  // append item
}
foreach(var item in list.OfType<Person>().OrderBy(x => x.Name))
{
  // append item
}