繁体   English   中英

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

[英]Sort dynamic dropdown list alphabetically

我有一个下拉列表,每个项目的水平三个字符串。 我怎样才能按字母顺序首先从每个项目的字符串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应用程序内部。

我认为这样的事情应该起作用。 Tuple排序应按字典顺序:

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

OfType调用还应该消除对typeof检查和typeof的需要-结果应该是Machine的可迭代项。


关于多种对象类型的注释:

将类似类型分组在一起

从UI / UX角度来看,这将是我的默认首选项,除非将MachinePerson混合在一起确实很有意义。 根据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
}

交织各种类型

private Tuple<string,string> Projection(BaseClass x)
{
    Machine item = x as Machine;
    if(item != null)
    {
      return new Tuple<string,string>(item.MachineName,item.Serial);
    }

    Person item = x as Person;
    if(item != null)
    {
      return new Tuple<string,string>(item.Name,"");
    }
}

foreach(var item in list.OrderBy(Projection))
{
  // check type of item and append as appropriate
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM