如何编辑列表中的重复项?

时间:2017-11-07 20:32:36

标签: c# list

我使用带有cId(课程ID)和cName(课程名称)的DropDownList。但是,如果存在重复的cName,我希望startDate加入cName。喜欢:$"cName ({startDate})"

这就是我的列表的样子:

var list = new List<(int cId, string cName, string startDate)>
{
    (1, "Math", "1/12"),
    (2, "Music", "1/12"),
    (3, "English", "1/12"),
    (4, "English", "11/4"),
    (5, "Swedish", "1/12"),
    (6, "Russia", "1/12")
};

由于有两个带有英语的 cName startDate 应添加到其中#string ,如

cId    cName
----   -----
 1   | "Math"
 2   | "Music"
 3   | "English (1/12)"
 4   | "English (11/4)"
 6   | "Swedish"
 7   | "Russia"

我的想法:

如果列表中有任何重复的cName cName = $"cName ({startDate})"

修改

这是将列表添加到DropDownList中的方式:

foreach (var item in list)
      {
           dplCourse.Items.Add(new ListItem(item.cId, item.cName));
      }

3 个答案:

答案 0 :(得分:6)

您需要对列表进行一次传递,找出哪些是重复的,并在将它们添加到显示列表之前更改重复项的名称。

<ImageView
    android:id="@+id/imageView13"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:scaleType="centerCrop"
    android:layout_alignParentStart="true"/>

答案 1 :(得分:2)

您可以使用LINQ获取显示名称。您可以对项目进行分组,检查组中的项目数,然后将组重新展开回一个项目的平面列表。由于您有一个ID,您可以相应地订购商品(分组会混淆订单)。

这一切看起来像这样:

var listItemsQry =
    from item in list
    group item by item.cName into itemGrp
    let itemCount = itemGrp.Count()
    from groupedItem in itemGrp
    orderby groupedItem.cId
    let itemName = itemCount > 1 ?
        $"{groupedItem.cName} {groupedItem.startDate}" :
        groupedItem.cName
    select new ListItem(item.cId, itemName);

foreach(ListItem item in listItemsQry) {
    dplCourse.Items.Add(item);
}

答案 2 :(得分:0)

您可以使用的最简单且不那么智能的解决方案是列出包含这些项目的列表,这些项目是唯一的。您可以实现它,例如,如果在具有唯一值的临时列表中已存在cName,则foreach使用条件。之后,创建一个新的第二个临时列表,其中包含那些具有重复项的项,并将它们全部放在cName + startDate中。最后,您可以在最后一个中合并两个临时列表。