根据另一个列表中的相关值在c#中对列表进行排序 [英] Sorting a list in c# based on dependant values in another list

查看:382
本文介绍了根据另一个列表中的相关值在c#中对列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据另一个列表中出现的顺序对项目列表进行排序.

I'm trying to sort a list of items based on the order of the occurrence in another list.

下面是基本结构:

public class ItemList
{
    public List<Item> items;

    public ItemList(string myValue)
    {
        items = new List<Item>();
    }

    public void addItem (string myValue)
    {
        var newItem = new Item(myValue);
        items.Add(newItem);
    }

    public class Item
    {
        public List<string> myLinkedValues;
        public string myValue;

        public Item(string myValue)
        {
            myLinkedValues = new List<string>();
        }

        public void addLinkedItem(string linkedItem)
        {
            myLinkedValues.Add(linkedItem);
        }
    }
} 

因此,如果我的列表具有以下值(myValue和myLinkedValues):

So if my list had the following values (myValue and myLinkedValues):

A
 C
B
 A C
C
D
 C B

我正在尝试对其进行排序,因此依赖值首先是这样的:

I'm trying to sort it so dependant values are first like this:

C
A
 C
B
 A C
D
 C B

基本上,我的操作速度很慢,所以我想知道是否有更快的方法.

Basically the way I do it is quite slow, so I was wondering if there is some quicker way of doing this.

编辑,我的基础知识:

public void Sort()
        {
            var changed = true;
            while (changed)
            {
                changed = false;
                var sortedList = new List<Item>();
                foreach (Item item in items)
                {
                    var minimumPosition = -1;
                    var parents = Linked.FindAll(myList => myList.isLinked(item.myValue);
                    foreach (Item parent in parents)
                    {
                        var parentPosition = sortedList.IndexOf(parent);
                        if (minimumPosition == -1 || (parentPosition < minimumPosition && parentPosition != -1))
                        {
                            minimumPosition = parentPosition;
                        }
                    }

                    if (minimumPosition == -1)
                    {
                        sortedList.Add(item);
                    }
                    else
                    {
                        sortedList.Insert(minimumPosition, item);
                        changed = true;
                    }
                }
                items = sortedList;
            }
        }

    public bool isLinked(string myValue)
    {
        var isLinked = false;
            isLinked = items.Any(check => check == myValue;
            return isLinked;
    }

推荐答案

尝试此操作,如果我对您的要求有误,请对不起.

Try this and sorry if i have understood your requirement wrongly.

在下面将您视为具有字符串列表的从属集合.

Consider below as your dependent collection with list of string.

List<string> dependentCollection= new List<string>{ "A","B" "C", "D", "E","F","G"};

这是您的原始收藏集

List<string> myValues = new List<string>{"C","G","B","A"}; 
var sortedList= myValues.OrderBy(i => dependentCollection.IndexOf(i.ToString()));

输出如下所示,

A B C G

这篇关于根据另一个列表中的相关值在c#中对列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆